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个字节。