web-dev-qa-db-fra.com

MySQL - longueur () vs char_length ()

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)
206
Yada

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.

339
Andomar

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.

17
Brent