Какая основная разница между length()
а char_length()
?
Я считаю, что это как-то связано с двоичными и недвоичными строками. Есть ли практическая причина хранить строки в двоичном виде?
mysql> select length('MySQL'), char_length('MySQL');
+-----------------+----------------------+
| length('MySQL') | char_length('MySQL') |
+-----------------+----------------------+
| 5 | 5 |
+-----------------+----------------------+
1 row in set (0.01 sec)
Ответы:
LENGTH()
возвращает длину строки, измеренную в байтах .CHAR_LENGTH()
возвращает длину строки, измеренную в символах .Это особенно актуально для Unicode, в котором большинство символов кодируются двумя байтами. Или UTF-8, где количество байтов меняется. Например:
Как видите, знак евро занимает 3 байта (он закодирован как
0xE282AC
в UTF-8), хотя это всего один символ.источник
0313 combining comma above
. Поскольку a = 61, 0x00610313 отображается как a̓ и занимает 4 байта.varchar (10) будет хранить 10 символов, которые могут быть более 10 байтов. В индексах он будет выделять максимальную длину поля - поэтому, если вы используете UTF8-mb4, он выделит 40 байтов для поля из 10 символов.
источник