MySQL中统计字符串中字符个数的两个函数:
- char_length(
column_name
):计算单位是字符,不管是汉字还是字母都算是一个字符,例如:
select char_length('abcd1234你好')
-- 结果为:
10
- length(
column_name
):
对于length(column_name)
就比较特殊,它的计算单位是字节,例如使用utf8
编码时,一个汉字为三个字节,一个数字或者一个字母为一个字节;使用gbk
编码时,一个汉字为两个字节,一个数字或一个字母为一个字节,例如:
select length('你好abcd1234');
-- 结果为:
14
这里有一个小技巧,我们可以根据char_length(str)
和length(str)
是否相等来判断某个字段值是否包含非数字字母的其他值,例如中文值等,这是一个小技巧!
这里再给一个扩展:
在MySQL5.0.3
版本前后,varchar
类型大小的计算方式发生了变化,在5.0.3
版本之前,varchar
的计算方式为varchar(length(str))
,在5.0.3
版本之后,varchar
的计算方式变成了varchar(char_length(str))
。
如在5.0.3
版本之前,如果使用utf8编码,varchar(20)
最多只能存6个汉字;
在5.0.3
版本之后,如果使用utf8
编码,varchar(20)
最多可以存20个汉字。