MySQL - длина () против char_length () - PullRequest
202 голосов
/ 14 ноября 2009

В чем основное различие между length() и char_length()?

Я полагаю, что это как-то связано с двоичными и недвоичными строками. Есть ли практическая причина хранить строки в двоичном виде?

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

Ответы [ 2 ]

333 голосов
/ 14 ноября 2009

LENGTH() возвращает длину строки , измеренную в байтах .
CHAR_LENGTH() возвращает длину строки , измеренную в символах .

Это особенно актуально для Unicode, в котором большинство символов кодируются двумя байтами. Или UTF-8, где количество байтов меняется. Например:

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

Как видите, знак евро занимает 3 байта (в кодировке UTF-8 он кодируется как 0xE282AC), хотя он всего один символ.

17 голосов
/ 21 апреля 2015

varchar (10) будет хранить 10 символов, которые могут быть более 10 байтов. В индексах он будет выделять максимальную длину поля - поэтому, если вы используете UTF8-mb4, он выделит 40 байтов для поля из 10 символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...