MySQL 字符集utf8和utf-8的关系
程序员文章站
2022-05-18 10:45:32
[toc] 什么是字符集(character set) 字符的二进制编码方式 二进制编码到一套字符的映射 二进制 编码 字符 校对规则(collation) 在字符集内用于比较字符的一套规则 ASCII码 1个字节由8个二进制位组成 1个字节可表示256种不同的状态(256个不同符号) ASCII码 ......
什么是字符集(character set)
- 字符的二进制编码方式
- 二进制编码到一套字符的映射
- 二进制->编码->字符
校对规则(collation)
- 在字符集内用于比较字符的一套规则
ascii码
- 1个字节由8个二进制位组成
- 1个字节可表示256种不同的状态(256个不同符号)
- ascii码规定了128个字符(英文字符和一些标点符号)的编码
unicode国际化支持
- 世界上存在多种编码方式,同一个二进制数字被解释成了不同的符号
- 现存 编码 不能在多语言环境中使用,诞生了unicode(统一码)
- 一个字符的unicode编码是确定的
- unicode编码实现方式各不相同
- unicode的实现方式称为unicode转化格式(utf)
utf-8
- utf-8是unicode的实现方式之一
- 其它实现方式还有utf-16, utf-32
- 变长编码,一个符号使用1~4个字节表示
- utf8是mysql存储unicode数据的一种可选方法
utf8
- mysql中实现了utf-8编码的unicode 字符集
- mysql中utf8是utf8mb3的别名
- utf8中,一个符号使用1~3个节点表示
- 对utf-8支持不彻底,可采用utf8mb4字符集
utf8与utf8mb4的关系
- 都是实现了utf-8编码的unicode 字符集
- utf8仅支持基本多语言平面basic multilingual plane (bmp)
- utf8mb4支持bmp之外的补充字符(如emoji,emoji 是一种特殊的 unicode 编码)
- utf8 一个字符最多使用3个字节存储,utf8mb4 一个字符最多使用4个字节存储
- 对于bmp字符,utf8和utf8mb4具有相同的编码,相同的长度
- 对于非bmp字符,utf8mb4使用4个字节来存储,utf8不能存储非bmp字符
- innodb中默认最大可对767个字节建立索引
- 使用utf8 的列最多可对255个字符建立索引
- 使用utf8mb4 的列最多可对191个字符建立索引
超集
- 字符集a,b ,b支持的所有字符a都支持,a 是b超集
- 比如 gbk字符集是gb2312字符集的超集,它们又都是ascii字符集的超集
- utf8mb4是utf8的超集
字符集设置
set names x 等价于
- set character_set_client=x;
- set character_set_connection=x;
- set character_set_results=x;
--default-character-set 用户连接时设置字符集 等价于
- set character_set_client=x;
- set character_set_connection=x;
- set character_set_result=x;
init-connect=set names binary- 让client和server交互的时候以 什么模式(不做任何转化)来传送
default-character-set
- 设置[mysql]和[client] 中的字符集
character-set-server
- 设置[mysqld] 进程的默认字符集
collation-server
- 设置[mysqld] 进程的默认校对规则
- utf8_general_ci 查找、排序不区分大小写
- utf8_bin 查找、排序区分大小写
推荐阅读
-
UTF-8 GBK UTF8 GB2312 之间的区别和关系介绍
-
一文读懂mysql事务隔离级别和锁的关系
-
Linux下MySQL 5.5/5.6的修改字符集编码为UTF8的方法
-
MySQL字符集utf8修改为utf8mb4的方法步骤
-
MAC下修改mysql默认字符集为utf8的方法
-
mysql表的创建原则、主要数据类型、字符集和表碎片等知识讲解
-
mysql修改数据库编码(数据库字符集)和表的字符编码的方法_MySQL
-
Linux下MySQL的彻底卸载和安装配置字符集_MySQL
-
完美转换MySQL的字符集 解决查看utf8源文件中的乱码问题_MySQL
-
转换包含UTF8和latin1等多种编码的MYSQL数据库_MySQL