更多>>数据库 Blog

MySQL中 varchar(12) 可以存储多少个汉字

涉及到字符串函数 length 和 char_length 计算单位的区别,以及编码 utf8 和 gbk 对汉字占用几个字节的区别。

一、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)插入一条数据:

2019-12-18_143942.jpg

(3)检索长度

SELECT length(my_name), char_length(my_name), my_name FROM `my_test_utf8` where my_id=1;

返回值如下:

2019-12-18_143733.jpg

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)插入一条数据:

2019-12-18_143909.jpg

(3)检索长度

SELECT length(my_name), char_length(my_name), my_name FROM `my_test_gbk` where my_id=1;

返回值如下:

2019-12-18_143702.jpg


三、总结

对于 UTF8 编码,一个汉字,即一个字符,占 3 个字节。

对于 GBK 编码,一个汉字,即一个字符,占 2 个字节。

MySQL 4.0 版本以下,以字节解释长度。

MySQL 5.0 版本以上,以字符解释长度。

所以 varchar(12) 可存储 12 个汉字,即 12 个字符。


评论列表

暂时没有相关记录

发表评论

用来接收审核回复提醒,请认真填写

  换一张?
captcha
看不清?点击图片换一张