MySQL - length()vs char_length()

时间:2009-11-14 14:12:32

标签: mysql string

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 个答案:

答案 0 :(得分:330)

LENGTH()返回以字节为单位的字符串的长度。
CHAR_LENGTH()会返回以字符衡量的字符串的长度。

这与Unicode特别相关,其中大多数字符以两个字节编码。或UTF-8,其中字节数变化。例如:

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

正如您所看到的,欧元符号占用3个字节(在UTF-8中编码为0xE282AC),即使它只有一个字符。

答案 1 :(得分:17)

varchar(10)将存储10个字符,可能超过10个字节。 在索引中,它将分配字段的最大长度 - 因此,如果您使用UTF8-mb4,它将为10个字符字段分配40个字节。