MySQL – length()vs char_length()

length()char_length()之间的主要区别是什么?

我相信这与二进制和非二进制string有关。 是否有任何实际的理由将string存储为二进制?

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

LENGTH()返回以字节为单位string长度。
CHAR_LENGTH()返回string的长度。

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

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

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

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