Mysql中JSON类型字段中文乱码问题

697 阅读1分钟

发现问题

2023超职季完成任务之后需要发送沟通豆,但是沟通豆列表页发现有乱码问题,描述的文案是放在Mysql JSON类型中的。 这个问题文字是配置在WConfig中的,用户完成任务之后先在数据库中保存一条记录,然后再调用沟通豆的下游服务进行发送。 所以这里猜测是数据库编码导致的中文乱码。

定位问题

debug,然后将包含中文的字符串进行转码结果如下,能正常展示。 image.png

直接返回内容 image.png

1.尝试修改数据库编码集为UTF8

ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动奖励表'

这里数据库使用的是 utf8mb4 编码,为什么不是utf8编码,这里查了下 mysql utf8 编码集使用的是3字节 而正规的utf-8是4个字节的,mysql为了修复这个bug推出了 utf8mb4 编码集 mysql 会在以后得版本中弃用 utf8mb3,在8.0.28开始utf8对应的字符编码默认指向 utf8mb4,以前是 utf8mb3

官方链接&截图

dev.mysql.com/doc/refman/… image.png

2.JDBC驱动包的bug

然后猜测是不是json类型的问题,于是在其他的字段上加了一段中文,查询发现没有乱码。 google搜索了下,有说是 jdbc驱动的问题导致的,于是升级驱动jar版本 原来的版本

 mysql:mysql-connector-java:jar:5.1.34:compile

升级之后的版本

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.49</version>
</dependency>

升级完成之后重新测试--乱码解决 image.png