前两天在做微信接入的时候,获取用户的nickname保存到数据库时出现异常,发现是用户名中带有emoji表情,以及从微信传过来的居然是ISO-8859-1编码,真的很坑,名字里的中文全变成问号。
以下是解决方案:
mysql5.5以上的版本引入了utf8mb4编码格式以支持emoji格式,是utf8的超集,支持中文和emoji。
修改数据库、表字符集为utf8mb4
1、在[client]字段里加入default-character-set=utf8mb4,如下:
[client]
default-character-set=utf8mb4
2、在[mysqld]字段里加入character-set-server=utf8mb4,如下:
[mysqld]
character-set-server=utf8mb4
3、在[mysql]字段里加入default-character-set=utf8mb4,如下:
[mysql]
default-character-set=utf8mb4
修改jdbc连接串的设置
jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf8
重启mysql
systemctl restart mysql
一般到这里已经可以了,如果还不行再按一下修改
修改database默认的字符集
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
修改table的字符集
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 CO
LLATE utf8mb4_unicode_ci;
修改column默认的字符集
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;