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är zu speichern?
mysql> select length('MySQL'), char_length('MySQL');
+-----------------+----------------------+
| length('MySQL') | char_length('MySQL') |
+-----------------+----------------------+
| 5 | 5 |
+-----------------+----------------------+
1 row in set (0.01 sec)
Antworten:
LENGTH()
Gibt die Länge der Zeichenfolge in Byte zurück .CHAR_LENGTH()
Gibt die Länge der Zeichenfolge in Zeichen zurück .Dies ist besonders relevant für Unicode, bei dem die meisten Zeichen in zwei Bytes codiert sind. Oder UTF-8, bei dem die Anzahl der Bytes variiert. Beispielsweise:
Wie Sie sehen können, belegt das Euro-Zeichen 3 Bytes (es ist wie
0xE282AC
in UTF-8 codiert ), obwohl es nur ein Zeichen ist.quelle
0313 combining comma above
. Da a = 61 ist, wird 0x00610313 als a̓ angezeigt und benötigt 4 Byte.varchar (10) speichert 10 Zeichen, die mehr als 10 Bytes umfassen können. In Indizes wird die maximale Länge des Felds zugewiesen. Wenn Sie also UTF8-mb4 verwenden, werden dem 10-Zeichen-Feld 40 Byte zugewiesen.
quelle