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>

⭐️希望本文章对您有帮助,您的「 转发、点赞 是我创作的无限动力。

扫描下方二维码关注微信公众号,您会收到更多优质文章推送。

posted @ 2022-02-03 10:36  JustJavaIt  阅读(3903)  评论(0编辑  收藏  举报