length()
和char_length()
之间的主要区别是什么?
我认为它与二进制和非二进制字符串有关。是否有任何实际的理由将字符串存储为二进制文件?
mysql> select length('MySQL'), char_length('MySQL');
+-----------------+----------------------+
| length('MySQL') | char_length('MySQL') |
+-----------------+----------------------+
| 5 | 5 |
+-----------------+----------------------+
1 row in set (0.01 sec)
答案 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个字节。