UTF-8
Unicode 是「字符集」,是字符与特定ID的映射
UTF-8、UTF-16 是「编码规则」,是对字符的传输规则
UTF-8 是以 8 位为一个编码单位的可变长编码。会将一个码位编码为 1 到 4 个字节。同理,UTF-16是以16位为单位
Mysql的utf8mb4
MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是「most bytes 4」的意思,专门用来兼容四字节的unicode。
utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。 好好地为什么要多个utf8mb4呢?以为mysql支持的 utf8 编码最大字符长度为 3 字节(理解为Mysql之前的utf8是有坑的),如果遇到 4 字节的宽字符就会插入异常了。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等。
修改编码为utf8mb4
登录mysql,输入密码。
sudo mysql -u root -p
查看当前mysql的字符集
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
显示
image.png再开一个终端tab,查看配置文件路径
~$ mysql --help|grep my.cnf
# 输出
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
编辑 已经存在配置文件,笔者的是 /etc/mysql/my.cnf ,
插入
[client]
default-character-set=utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
skip-character-set-client-handshake = true
[mysql]
default-character-set = utf8mb4
保存好,重启 mysql
service mysql restart
再次登录,查看字符集(见上文)。得到输出
image.png
网友评论