MySQL8默认使用utf8mb4\utf8mb4_0900_ai_ci。
在utf8 Unicode 编码下:每个字符的长度是不固定的,根据不同的字变化。
汉字
1个汉字为1个字符,常用汉字占3个字节,不常用的汉字占4个字节;
而MySQL的utf8又叫utf8mb3,存不了不常用的4个字节和emoji表情,所以新增了utf8mb4;
英文
1个英文字母为1个字符,占1个字节;
utf8mb4是utf8的超集,对于3个字节的汉字,存储形式是一致的,所以可以直接升级
查看
- 查看MYSQL数据库服务器和数据库字符集、校验集
方法一:show variables like '%character%';
方法二:show variables like 'collation%';
- 查看库的字符集、校验集
show create database 库名
- 查看表的字符集、校验集
show create table 表名;
- 查看表字段的校验集
show full columns from 表名;
修改
- 修改库字符集、校验集
alter schema 库名 default character set utf8mb4 collate utf8mb4_0900_ai_ci;
- 修改表字符集、校验集
alter table 表名 default character set utf8 collate utf8_bin;
- 单独修改表字段的字符集、校验集
alter table 表名 modify 字段名 字段属性 character set utf8mb4 collate utf8mb4_0900_ai_ci;
校验规则
如果仅设置了字符集,系统会默认给校验集。
utf8mb4
默认校验为utf8mb4_0900_ai_ci,大小写不敏感
utf8mb4_0900_bin,大小写敏感
utf8
默认校验集为utf8_general_ci,大小写不敏感
utf8_bin,大小写敏感
关于代码插入emoji表情报错,请检查 表编码 和 数据库连接编码 是否同时为utf8mb4。
tips: 要使用 utf8mb4 节省空间,用 VARCHAR
替换 CHAR
。否则,MySQL必须为使用 utf8mb4字符集的列的每一个字符保留四字节的空间,因为其最大长度可能是四字节。
例如,MySQL必须为一个使用 utf8mb4 字符集的 char(10)的列保留40字节空间。