首页 > 技术文章 > MYSQL5.7.25升级兼容微信emoji实操

potatoChicken 2019-07-07 17:28 原文

  需求:

    h5前端页面显示昵称,兼容含emoji图像的昵称。

 

  技术调研:

    通过base_userinfo返回的微信用户信息,含emoji的返回形式为(XX□),微信接口数据达标。

    将(XX□)字符输出到文件中复制到数据库(已将数据库、表、字段的编码集改为utf8mb4【为UTF-8的超集,就和UTF-8是acsII的超集一样】)中,编写一个页面调用接口返回查看,返回结果达标。

    整体上可行。

 

  实现过程:

    1.修改数据库字符集:

      a.修改数据库默认配置,linux机器设置my.cnf,windows机器设置my.ini,内容如下:  

       [client]
      default-character-set=utf8mb4

      [mysql]
      default-character-set=utf8mb4

      [mysqld]
      character-set-server = utf8mb4
      collation-server = utf8mb4_unicode_ci
      init_connect = 'SET NAMES utf8mb4'
      character-set-client-handshake = false

 

      b.数据库、表、列字符集修改

      ALTER DATABASE 数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

      ALTER TABLE `表名` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

      ALTER TABLE `表名` MODIFY COLUMN `字段` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

 

    2.数据库重启

      定位命令: locate mysqld

      重启命令:mysqld restart

      

      

 

      

    3.校验

      检查下是否修改成功。

      校验命令:SHOW VARIABLES WHERE Variable_name LIKE 'character%' OR Variable_name LIKE 'collation%';

      

 

     4.应用修改

    数据库链接去掉:characterEncoding

  

     5.异常解析

    Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\xB3aa...' for column 'Content' at row 1

    该种错误说明数据库持久层框架暂时不支持emoji的字符,所以报了异常。

    解决方案:将配置的数据库url修改下,去掉characterEncoding=utf8

     

    关于重启mysql后,mysql的配置并未生效的问题(笔者在ubuntu18碰到,centos7.3正常),是软件系统默认只读配置问题。改为可读可写即可,修改下即可:

    请参考:https://www.cnblogs.com/alsm/p/8079453.html

    

    若是修改之后重启数据库character_set_server依旧没改变,使用如下命令:

    set character_set_server=utf8mb4;

 

    

 

  参考资料:

    https://blog.51cto.com/suifu/1853864

推荐阅读