varchar类型存储英文和汉字占用的字节和字符数
编码格式知识
一、关于 UTF-8
UTF-8(Unicode Transformation Format-8bit)。是用以解决国际上字符的一种多字节编码。
它对英文使用 8 位(即一个字节) ,中文使用 24 位(三个字节)来编码。
UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。
UTF-8编码的文字可以在各国支持 UTF-8 字符集额的浏览器上显示。 如果是UTF-8编码,则在外国人的英文 IE 也能显示中文,他们无需下载 IE 的中文语言支持包。
二、关于 GBK
GBK 是国家标准 GB2312 基础上扩容后兼容 GB2312 的标准。
GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成 1。
GBK包含全部中文字符,是国家编码,通用性比 UTF8 差,不过 UTF8 占用的数据库比GBK大。
三、关于 utf8mb4
MySql 5.5 之前,UTF8 编码只支持 1-3 个字节,只支持 BMP 这部分的 unicode 编码区,BMP 是基本就是 0000 ~ FFFF 这一区。
从 MySQL 5.5 开始,可支持 4 个字节 UTF 编码 utf8mb4,一个字符最多能有 4 字节,所以能支持更多的字符集。
utf8mb4 is a superset of utf8
tf8mb4 兼容 utf8,且比 utf8 能表示更多的字符。
至于什么时候用,看你做的什么项目了……在做移动应用时,会遇到IOS用户在文本的区域输入emoji表情,如果不做一定处理,就会导致插入数据库异常。
四、汉字长度与编码有关
MySql 5.0 以上的版本:
1、一个汉字占多少长度与编码有关:
UTF-8:一个汉字 = 3 个字节,英文是一个字节
GBK: 一个汉字 = 2 个字节,英文是一个字节
2、varchar(n) 表示 n 个字符,无论汉字和英文,MySql都能存入 n 个字符,仅实际字节长度有所区别。好比varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个。
3、MySQL 检查长度,可用 SQL 语言
SELECT LENGTH(fieldname) FROM tablename;
验证示例
验证5.0版本以上UTF-8编码格式下varchar类型存储英文和汉字占用的字节和字符数——一个汉字3 个字节,英文是一个字节。
# 创建表
CREATE TABLE `str_test` (
`str_ch` varchar(20) CHARACTER SET utf8 DEFAULT NULL COMMENT '中文字符',
`str_en` varchar(20) CHARACTER SET utf8 DEFAULT NULL COMMENT '英文字符'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
# 插入数据
INSERT INTO `drools`.`str_test`(`str_ch`, `str_en`)
VALUES ('新年快乐', 'happy new year');
# '新年快乐'占用的长度(字节数)和占用的字符数
# 'happy new year'占用的长度(字节数)和占用的字符数
<END>
⭐️希望本文章对您有帮助,您的「 转发、点赞 」是我创作的无限动力。
扫描下方二维码关注微信公众号,您会收到更多优质文章推送。