ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

varchar类型存储英文和汉字占用的字节和字符数

2022-02-03 11:01:37  阅读:310  来源: 互联网

标签:字符 UTF 字节 编码 汉字 英文 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>

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

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

标签:字符,UTF,字节,编码,汉字,英文,varchar
来源: https://www.cnblogs.com/liaowenhui/p/15861247.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有