¿Cuál es la principal diferencia entre length()
y char_length()
?
Creo que tiene algo que ver con cadenas binarias y no binarias. ¿Hay alguna razón práctica para almacenar cadenas como binarias?
mysql> select length('MySQL'), char_length('MySQL');
+-----------------+----------------------+
| length('MySQL') | char_length('MySQL') |
+-----------------+----------------------+
| 5 | 5 |
+-----------------+----------------------+
1 row in set (0.01 sec)
Respuestas:
LENGTH()
devuelve la longitud de la cadena medida en bytes .CHAR_LENGTH()
Devuelve la longitud de la cadena medida en caracteres .Esto es especialmente relevante para Unicode, en el que la mayoría de los caracteres están codificados en dos bytes. O UTF-8, donde varía el número de bytes. Por ejemplo:
Como puede ver, el signo del euro ocupa 3 bytes (está codificado como
0xE282AC
en UTF-8) aunque solo sea un carácter.fuente
0313 combining comma above
. Como a = 61, 0x00610313 se muestra como a̓ y ocupa 4 bytes.varchar (10) almacenará 10 caracteres, que pueden tener más de 10 bytes. En los índices, asignará la longitud máxima del campo, por lo que si está utilizando UTF8-mb4, asignará 40 bytes para el campo de 10 caracteres.
fuente