今天同步微信公众号粉丝数据的时候,发现其中一条插入失败了,错误信息如下:
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x87\xB1 \xF0...' for column 'nickname' at row 1
异常排查
检查后发现粉丝的昵称是特殊字符: ? ? ?
检查数据库后发现编码为:utf8mb4
,修改数据库编码为 utf8mb4mb4
后再次测试,依旧出错。
通过项目日志,获取到具体 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.yml
的 Durid
参数中设置客户端连接数据库编码
spring:
datasource:
driverClassName: com.mysql.jdbc.Driver
password: **
url: jdbc:log4jdbc:mysql://127.0.0.1:3306/**?useUnicode=true&characterEncoding=utf8mb4&zeroDateTimeBehavior=convertToNull&rewriteBatchedStatements=true
username: root
druid:
# 兼容 utf8mb4mb4 编码格式
connection-init-sqls: set names utf8mb4mb4
重启项目,再次尝试,同步成功~
本文共 172 个字数,平均阅读时长 ≈ 1分钟
大佬的微信公众号是什么啊?想看看
我自己没有,这个是给公司开发的公众号