1.介绍
计算机只能存储二进制的数据,那英文、汉字、表情等字符应该如何存储呢?
字符和二进制的数据一一对应起来,比如说字符“a”对应“01100001”,反之,“01100001”对应 “a”。我们将字符对应二进制数据的过程称为字符编码,反之,二进制数据解析成字符的过程称为“字符解码
2.常见字符集
ASCII:8位,英文国家专用
GB2312
GB18030
GBK:收录更多汉字
Unicode:容纳了世界上几乎所有字符,但没规定如何编码字符
UTF-8:Unicode的实现,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;
table:CREATE TABLE `user` () ENGINE=InnoDB DEFAULT CHARSET=utf8;
column:`phone` varchar(33) CHARACTER SET utf8mb3 DEFAULT NULL
优先级递增
可以看到默认数据库级别字符集为latin1
- 修改默认字符集
创建: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容器即可