记 Spring Boot 项目无法插入 utf8mb4 编码数据的问题

记 Spring Boot 项目无法插入 utf8mb4 编码数据的问题

Mr. Zheng
2021-07-15 / 2 评论 / 63 阅读 / 正在检测收录...

今天同步微信公众号粉丝数据的时候,发现其中一条插入失败了,错误信息如下:

java.sql.SQLException: Incorrect string value: '\xF0\x9F\x87\xB1 \xF0...' for column 'nickname' at row 1

kr4ncng2.png

异常排查

检查后发现粉丝的昵称是特殊字符: 🇱 🇦 🇾

检查数据库后发现编码为:utf8,修改数据库编码为 utf8mb4 后再次测试,依旧出错。

通过项目日志,获取到具体 Sql 代码

INSERT INTO wx_user ( open_id, nickname, sex, head_img_url, country, province, city, remark, 
subscribe, subscribe_time ) VALUES ( '**', '🇱 🇦 🇾 ', 1, 
'', 
'**', '**', '**', '', 1, '2021-07-15 16:03:00' ) 

手动执行 Sql 代码,居然插入成功了...

解决办法

通过上面的排查,排除掉了数据库的问题,通过查阅资料,发现可以在 application.ymlDurid 参数中设置客户端连接数据库编码

spring:
  datasource:
    driverClassName: com.mysql.jdbc.Driver
    password: **
    url: jdbc:log4jdbc:mysql://127.0.0.1:3306/**?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&rewriteBatchedStatements=true
    username: root
    druid:
      # 兼容 utf8mb4 编码格式
      connection-init-sqls: set names utf8mb4

重启项目,再次尝试,同步成功~

1

评论 (2)

取消
  1. 头像
    spring
    Windows 10 · Google Chrome

    大佬的微信公众号是什么啊?想看看

    回复
    1. 头像
      Mr. Zheng 作者
      MacOS · Google Chrome
      @ spring

      我自己没有,这个是给公司开发的公众号

      回复