最近在做微信授权的时候,获取微信用户名的时候有些微信用户直接报错,有些微信是正常的,最后排查出原来是有的微信用户名有表情包,造成sql报错,在曾经我就知道mysql要存储表情包的时候创建数据库的时候字符编码要改为utf8mb4自己创建的数据库也是这个编码,查看数据表的编码也没问题,接着有是一阵的在网上搜索大佬们的经验分享。大致都是和我一样的,陷入深深在的思索中。
mysql的utf8编码的一个字符最多3个字节,但是一个emoji表情为4个字节,所以utf8不支持存储emoji表情。但是utf8的超集utf8mb4一个字符最多能有4字节,所以能支持emoji表情的存储。下面介绍了关于如何修改mysql数据库的编码格式变为utf8mb4的具体方法。
具体步骤
-
1、直接进入
mysql的命令操作页面或者使用本地的客户端navicat premium上执行命令 -
2、修改
database的字符集ALTER DATABASE 数据库名 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; # 示例(修改beego表) # ALTER DATABASE beego CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; -
3、修改数据表的字符串集
ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # 示例(修改wei_xin_user表) # ALTER TABLE wei_xin_user CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -
4、重点记得要重启数据库(不同系统重启方式不一样,centos系统上可以参考)
-
5、自己测试插入表情包