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. Existe-t-il une raison pratique pour stocker des chaînes en tant que binaires?
mysql> select length('MySQL'), char_length('MySQL');
+-----------------+----------------------+
| length('MySQL') | char_length('MySQL') |
+-----------------+----------------------+
| 5 | 5 |
+-----------------+----------------------+
1 row in set (0.01 sec)
LENGTH()
renvoie la longueur de chaîne mesurée en octets.CHAR_LENGTH()
renvoie la longueur de 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:
select length(_utf8 '€'), char_length(_utf8 '€')
--> 3, 1
Comme vous pouvez le constater, le symbole de l’euro occupe 3 octets (il est codé sous la forme 0xE282AC
en UTF-8), même s’il ne s’agit que d’un seul caractère.
varchar (10) stockera 10 caractères, qui peuvent comporter plus de 10 octets. Dans les index, il affectera la longueur maximale du champ. Ainsi, si vous utilisez UTF8-mb4, il allouera 40 octets pour le champ de 10 caractères.