记录一次mysql插入表情踩坑记

504 阅读1分钟

最近在做微信授权的时候,获取微信用户名的时候有些微信用户直接报错,有些微信是正常的,最后排查出原来是有的微信用户名有表情包,造成sql报错,在曾经我就知道mysql要存储表情包的时候创建数据库的时候字符编码要改为utf8mb4自己创建的数据库也是这个编码,查看数据表的编码也没问题,接着有是一阵的在网上搜索大佬们的经验分享。大致都是和我一样的,陷入深深在的思索中。

mysqlutf8编码的一个字符最多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、自己测试插入表情包