mysql的字符编码总结-数据库-IT技术博客

mysql的字符编码总结

时间:2019-07-31 21:11:06 浏览: 字体: 放大 缩小


一、关于UTF-8

UTF-8 Unicode Transformation Format-8bit。是用以解决国际上字符的一种多字节编码。


它对英文使用8位(即一个字节) ,中文使用24位(三个字节)来编码


UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。


UTF-8编码的文字可以在各国支持UTF8字符集额的浏览器上显示。

如果是UTF8编码,则在外国人的英文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能表示更多的字符。


如果要保存一些特殊的表情符合,就要采用utf8mb4,否则保存不成功!



四、汉字长度与编码有关

MySql 5.0 以上的版本:


1、一个汉字占多少长度与编码有关:


UTF-8:一个汉字 = 3个字节,英文是一个字节

GBK: 一个汉字 = 2个字节,英文是一个字节

2、varchar(n) 表示n个字符,无论汉字和英文,MySql都能存入 n 个字符,仅实际字节长度有所区别。


3、MySQL检查长度,可用SQL语言

#tablename为表名,fieldname为字段
SELECT LENGTH(fieldname) FROM tablename;

#不用建表也可以直接测试,现在的引号是中文引号,占用三个字节
mysql> SELECT LENGTH("我爱您,中国");
+------------------------+
| LENGTH("我爱您,中国") |
+------------------------+
|                     18 |
+------------------------+
1 row in set (0.03 sec)

#"我爱您,"占用12字节,"China"占用5个
mysql> SELECT LENGTH("我爱您,China");
+-------------------------+
| LENGTH("我爱您,China") |
+-------------------------+
|                      17 |
+-------------------------+
1 row in set (0.03 sec)

 上面是utf8编码的情况执行的结果,如果想查看自己的数据库的编码,可以用下面的命令。

mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------------------+
| Variable_name            | Value                                  |
+--------------------------+----------------------------------------+
| character_set_client     | utf8                                   |
| character_set_connection | utf8mb4                                |
| character_set_database   | utf8                                   |
| character_set_filesystem | binary                                 |
| character_set_results    | utf8                                   |
| character_set_server     | utf8                                   |
| character_set_system     | utf8                                   |
| character_sets_dir       | D:\mysql-8.0.13-winx64\share\charsets\ |
+--------------------------+----------------------------------------+
8 rows in set (0.06 sec)



标签: mysql编码