【开发踩坑】 MySQL不支持特殊字符(表情)插入问题

背景

在这里插入图片描述
线上功能报错:

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版本
    选择对应的解决方案
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值