一、length(str) 和 char_length(str) 的区别
1、length(str)
返回字符串 str 的长度,单位为字节。一个多字节字符算作多字节。
2、char_length(str)
返回字符串 str 的长度,单位为字符。一个多字节字符算作一个单字符。
这意味着对于一个包含5个2字节字符的字符串,length()的返回值是 10,而 char_length() 的返回值则为 5。
二、UTF-8 编码与 GBK 编码的区别
1、UTF8 编码数据表
(1)创建表CREATE TABLE `my_test_utf8` (
`my_id` int(11) NOT NULL AUTO_INCREMENT,
`my_name` varchar(12) DEFAULT NULL,
PRIMARY KEY (`my_id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='my_test UTF8';
(2)插入一条数据:
(3)检索长度SELECT length(my_name), char_length(my_name), my_name FROM `my_test_utf8` where my_id=1;
返回值如下:
2、GBK 编码的数据表
(1)创建表CREATE TABLE `my_test_gbk` (
`my_id` int(11) NOT NULL AUTO_INCREMENT,
`my_name` varchar(12) DEFAULT NULL,
PRIMARY KEY (`my_id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=gbk COMMENT='my_test GBK';
(2)插入一条数据:
(3)检索长度SELECT length(my_name), char_length(my_name), my_name FROM `my_test_gbk` where my_id=1;
返回值如下:
三、总结
对于 UTF8 编码,一个汉字,即一个字符,占 3 个字节。
对于 GBK 编码,一个汉字,即一个字符,占 2 个字节。
MySQL 4.0 版本以下,以字节解释长度。
MySQL 5.0 版本以上,以字符解释长度。
所以 varchar(12) 可存储 12 个汉字,即 12 个字符。