MySQL字符集简明

66 阅读1分钟

1.介绍

计算机只能存储二进制的数据,那英文、汉字、表情等字符应该如何存储呢?

字符和二进制的数据一一对应起来,比如说字符“a”对应“01100001”,反之,“01100001”对应 “a”。我们将字符对应二进制数据的过程称为字符编码,反之,二进制数据解析成字符的过程称为“字符解码

2.常见字符集

ASCII:8位,英文国家专用

GB2312

GB18030

GBK:收录更多汉字

Unicode:容纳了世界上几乎所有字符,但没规定如何编码字符

UTF-8Unicode的实现,1-4个字节作为字符编码

3. MySQL中的可用编码,utf8mb4才是UTF8的完整实现4个字符

注意MySQL字符集的utf8最长为3位,和UTF-8定义不同,缺少一些表情和复杂字符

show charset展示所以支持字符,5.7默认用latin1,8以上默认utf8mb4

  • 字符集层次
utf8mb4_unicode_ci是排序规则,collation

server:
databse:CREATE DATABASE test1 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
tableCREATE TABLE `user` () ENGINE=InnoDB DEFAULT CHARSET=utf8;
column:`phone` varchar(33) CHARACTER SET utf8mb3 DEFAULT NULL
优先级递增

可以看到默认数据库级别字符集为latin1

image.png

  • 修改默认字符集
创建:my.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

docker映射:-v /path/to/my.cnf:/etc/mysql/my.cnf
重启docker容器即可