简谈mysql中utf8mb4

最近开发遇到当Mysql存储微信昵称,而微信昵称有emoji表情符号时,数据库存储数据出现乱码。原因是mysql支持的utf8编码最大长度为3字节,如果遇4字节的宽字符(emoji表情符号、不常用的汉字、新增的Unicode字符等)就会插入异常。
Mysql在5.5.3之后增加utf8mb4(most bytes 4)编码,专门用于兼容四字节的unicode,一般情况。为了节省空间,使用utf8即可,但是建议使用utf8mb4。

Linux下更改mysql编码方式

使用Linux的发行版本为Centos

首先查看mysql版本,是否支持utf8mb4(5.5.3版本及以上)。

查看版本简易方法:
终端下:mysql -V
mysql下:status; 或 select version();

修改mysql配置文件

修改my.conf(windows下为my.ini)
修改前后的配置文件及系统编码分别如下:
修改前编码:
before_show_character
修改前配置文件:
before_mysql_config
修改后的编码:
after_show_character
修改后的配置文件:
after_mysql_config

修改database、table及column的字符集

1
2
3
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE table_name CHANGE column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

重启mysql

1
service mysql restart 或 systemctl restart mysqld.service

若更新sql,指定编码方式为utf8mb4

1
mysql -uyourName -pyourPassword --default-character-set=utf8mb4 mahjongforagency < /root/update.sql