背景
线上功能报错:
Cause:java.sql.SQLException:Incorrect string value:'xFO\x9F\x9FxBO'
for column 'comment'at row 1 uncategorized SQLException;
SQL state [HY000]:error code [1366]
排查
初步觉得是编码问题(utf8 — utf8mb4)
参考上个踩坑:
生僻字插入MySQL失败
找到插入的字符:
🟰
这个字符一看就很优秀啊
先去复现一下
but:
dba协助排查、测试:特殊字符插入都是成功的:
这里留意配置:
- 数据库版本:5.7
- connector版本:6.0.6
- 数据库设置:utf8
再看这个字符空间:
字符占用4字节,老的utf8是不支持的,只有mb4才支持
所以问题变成了,为什么这里的设置失效了;
服务器的配置本身就是 utf8mb4,所以是没问题的;那么问题多半出在客户端:
所以现在就是连接池版本问题:
connector版本:6.0.6
解决
被ChatGPT科普:
有的数据库连接版本是不支持utf8mb4的:
参考:https://zhuanlan.zhihu.com/p/351071361?utm_id=0
最终解决方案:
升级mysql-connector-java的版本到:
8.0.13
修复
test验证:插入成功
复盘
首先根据
- mysql版本(一般查看对应的表和字段,只要其支持utf8mb4字符集的话,那么就要看客户端的版本了)
- Java版本
选择对应的 - mysql-connector-java 版本
之后根据 - mysql-connector-java版本
选择对应的解决方案