CHAR_LENGTH
La función CHAR_LENGTH (o su alias CHARACTER_LENGTH) devuelve la longitud de una cadena en caracteres, independientemente de cuántos bytes ocupe cada carácter.
Sintaxis
CHAR_LENGTH(cadena)
-- Alias:
CHARACTER_LENGTH(cadena)Diferencia con LENGTH
SELECT
CHAR_LENGTH('España') AS caracteres,
LENGTH('España') AS bytes;| caracteres | bytes |
|---|---|
| 6 | 7 |
España tiene 6 caracteres pero 7 bytes porque la ñ ocupa 2 bytes en UTF-8.
SELECT
CHAR_LENGTH('日本語') AS caracteres,
LENGTH('日本語') AS bytes;| caracteres | bytes |
|---|---|
| 3 | 9 |
Cada carácter japonés ocupa 3 bytes en UTF-8.
Cuándo usar CHAR_LENGTH
Usa CHAR_LENGTH cuando necesites contar caracteres visibles. Usa LENGTH solo cuando necesites el tamaño en bytes (almacenamiento, transmisión).
-- Validar longitud mínima de nombres
SELECT nombre, CHAR_LENGTH(nombre) AS caracteres
FROM clientes
WHERE CHAR_LENGTH(nombre) < 5;Longitud de nombres de clientes
SELECT nombre, apellidos,
CHAR_LENGTH(nombre) AS len_nombre,
CHAR_LENGTH(apellidos) AS len_apellidos
FROM clientes
ORDER BY len_apellidos DESC
LIMIT 5;| nombre | apellidos | len_nombre | len_apellidos |
|---|---|---|---|
| Carlos | Rodríguez Martín | 6 | 17 |
| Pedro | Fernández Castro | 5 | 16 |
| Ana | Martínez Ruiz | 3 | 14 |
| Javier | Moreno Díaz | 6 | 11 |
| Laura | López Sánchez | 5 | 14 |
Truncar con indicador
SELECT
nombre,
CASE
WHEN CHAR_LENGTH(nombre) > 10
THEN CONCAT(LEFT(nombre, 10), '...')
ELSE nombre
END AS nombre_corto
FROM productos
LIMIT 5;| nombre | nombre_corto |
|---|---|
| iPhone 15 Pro | iPhone 15 ... |
| MacBook Air M2 | MacBook Ai... |
| AirPods Pro | AirPods Pr... |
| iPad Air | iPad Air |
| Apple Watch Series 9 | Apple Watc... |
Estadísticas de longitud
SELECT
MIN(CHAR_LENGTH(nombre)) AS minima,
MAX(CHAR_LENGTH(nombre)) AS maxima,
AVG(CHAR_LENGTH(nombre)) AS promedio
FROM productos;CHAR_LENGTH con NULL y vacío
SELECT
CHAR_LENGTH(NULL) AS nulo,
CHAR_LENGTH('') AS vacio,
CHAR_LENGTH(' ') AS espacio;| nulo | vacio | espacio |
|---|---|---|
| NULL | 0 | 1 |
En el siguiente artículo veremos LEFT para extraer caracteres desde la izquierda.
Escrito por Eduardo Lázaro
