Quelle est la principale différence entre length()
et char_length()
?
Je crois que cela a quelque chose à voir avec les chaînes binaires et non binaires. Y a-t-il une raison pratique de stocker des chaînes au format binaire?
mysql> select length('MySQL'), char_length('MySQL');
+-----------------+----------------------+
| length('MySQL') | char_length('MySQL') |
+-----------------+----------------------+
| 5 | 5 |
+-----------------+----------------------+
1 row in set (0.01 sec)
Réponses:
LENGTH()
renvoie la longueur de la chaîne mesurée en octets .CHAR_LENGTH()
renvoie la longueur de la chaîne mesurée en caractères .Ceci est particulièrement pertinent pour Unicode, dans lequel la plupart des caractères sont codés sur deux octets. Ou UTF-8, où le nombre d'octets varie. Par exemple:
Comme vous pouvez le voir, le signe Euro occupe 3 octets (il est codé comme
0xE282AC
en UTF-8) même s'il ne s'agit que d'un seul caractère.la source
0313 combining comma above
. Puisque a = 61, 0x00610313 s'affiche comme a̓, et il prend 4 octets.varchar (10) stockera 10 caractères, qui peuvent dépasser 10 octets. Dans les index, il allouera la longueur maximale du champ - donc si vous utilisez UTF8-mb4, il allouera 40 octets pour le champ de 10 caractères.
la source