it-swarm.com.de

MySQL - length () vs char_length ()

Was ist der Hauptunterschied zwischen length() und char_length()?

Ich glaube, es hat etwas mit binären und nicht-binären Zeichenfolgen zu tun. Gibt es einen praktischen Grund, Zeichenfolgen als Binärdateien zu speichern?

mysql> select length('MySQL'), char_length('MySQL');
+-----------------+----------------------+
| length('MySQL') | char_length('MySQL') |
+-----------------+----------------------+
|               5 |                    5 |
+-----------------+----------------------+
1 row in set (0.01 sec)
206
Yada

LENGTH() gibt die Länge des in Bytes gemessener String zurück.
CHAR_LENGTH() gibt die Länge der Zeichenkette gemessen in Zeichen zurück.

Dies gilt insbesondere für Unicode, bei dem die meisten Zeichen in zwei Bytes codiert sind. Oder UTF-8, wobei die Anzahl der Bytes variiert. Zum Beispiel:

select length(_utf8 '€'), char_length(_utf8 '€')
--> 3, 1

Wie Sie sehen, belegt das Euro-Zeichen 3 Bytes (verschlüsselt als 0xE282AC in UTF-8), obwohl es nur ein Zeichen ist.

339
Andomar

varchar (10) speichert 10 Zeichen, was mehr als 10 Bytes sein kann. In Indizes wird die maximale Länge des Felds zugewiesen. Wenn Sie also UTF8-mb4 verwenden, werden 40 Byte für das 10-Zeichen-Feld zugewiesen.

17
Brent