前些天在做微信授权获取到用户昵称往mysql数据库保存的时候出现了数据库异常,经过多方排查最后发现其根本原因是微信表情符号为4个字节的UTF-8编码。因此解决方案就是修改mysql数据库编码为utf8mb4,需要注意的是mysql 5.5以下的版本不支持。
具体修改数据库编码的方法如下:
window下(my.ini)
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin
linux下(my.cnf)
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
重点:
仅仅修改完数据库编码还不好使,接下来还需要将具体涉及到的表存储字段类型编码更改为utf8mb4,命令如下:
alter table test_user modify column username varchar(255) character set utf8mb4 collate utf8mb4_unicode_ci comment '用户名';
最后,如果在java web项目中配置了数据库连接信息或者在tomcat中配置了数据库连接池信息的话还需要将characterEncoding=UTF-8 配置去掉,之后重新授权并保存带表情的微信昵称就没问题啦。