本博客的记录的操作在linux
项目中需要从微信获取授权来登录,在此过程,保存微信emoji表情昵称到mysql数据库的时候出了错误。
老规矩百度一下,得知是mysql的utf8字符集只支持1-3个字节的字符,而表情则需要4个字节,所以mysql提供了一个utf8mb4字符集,在支持4个字节的同时又可以完美兼容utf8,免去我们的后顾之忧。
百度大部分的步骤是这样的,1-3步骤可以使用命令也可以使用工具(例如Navicat)来完成。
1:修改数据库字符集:
(1) 命令方式:ALTER DATABASE 数据库名 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
(2)工具方式:选中指定数据库,邮件选择数据库属性,修改字符集与排序规则如下:
2:修改数据库表的字符集
(1)命令方式: 首先切换到步骤1所操作的数据库,随后执行命令:ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
(2)工具方式: 打开数据库,选择要操作的表,右键选择设计表,选择选项,选择字符集和排序规则如下:
3:修改列的字符集
(1)命令方式: ALTER TABLE 表名 CHANGE 字段名 该字段原来的数据类型 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
例:ALTER TABLE user CHANGE name TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
(2)工具方式: 选中要操作的表,右键选择设计表,选择指定字段,修改字符集和排序规则如下:
4:修改my.cnf文件(windows是my.ini文件)
编辑文件,添加以下内容:
[client] default-character-set=utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect=’SET NAMES utf8mb4‘ [mysql] default-character-set=utf8mb4
5:最后还需要重启一下mysql哦。
上述方式适用于普通的mysql使用表情的问题。如果使用mybatis做持久层操作,可能会碰到更坑的问题,这些你都配置了,依然不会成功。找了很多资料,终于发现一位博主的解答,连接池的配置中可以添加这么一个配置:
<property name="connectionInitSqls"> <list> <value>set names utf8mb4</value> </list> </property>
最后,当然是完美的解决了。
很想贴上最后这位博主的链接~但找遍了历史记录也没能找到,恨忘记收藏~~~
如果无法通过以上方式解决问题,可以参考下这问简书博友的文章:https://www.jianshu.com/p/b0f5eb5d7cc3
他使用一种折中的方式,对存储的内容编码后保存,取出后再解码,相对较为麻烦,但也不失为一种解决方式
原文地址:https://www.cnblogs.com/WangYunShuaiBaoLe/p/9055215.html