You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL Connector/J 8.0.29插入UTF-8字符串报值不正确异常

问题现象

Java SpringBoot应用使用MySQL Connector/J 8.0.29版本向MySQL数据库插入UTF-8字符串时抛出异常,将驱动版本降级为8.0.27后问题不再复现。

环境说明

  • 服务端:MySQL 8.0.29,操作系统为Windows10,直接在服务端执行UTF-8编码的INSERT SQL语句可正常运行,无异常
  • 客户端:操作系统为Windows11,仅在客户端通过SpringBoot发送INSERT SQL语句时触发问题
参考信息
  • 表结构参考:
    表结构截图
  • 核心错误日志:
Caused by: java.sql.SQLException: Incorrect string value: '\x95|\x82\xA2\x98b' for column 'path' at row 1
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
  • 当前数据库连接配置:
spring.datasource.url=jdbc:mysql://localhost/${xpac.sql-database-name}?serverTimezone=Asia/Tokyo
  • 异常对应关系:待插入内容「怖い話」,与报错日志中记录的异常字符序列\x95|\x82\xA2\x98b完全对应(该序列为「怖い話」的Shift-JIS编码值)
问题根因

MySQL Connector/J从8.0.28版本开始调整了默认字符集检测逻辑:如果连接URL中未显式指定characterEncoding参数,驱动会自动读取客户端操作系统的默认编码作为连接字符集,不再沿用之前版本默认使用UTF-8的逻辑。
本次报错中,客户端系统默认编码为Shift-JIS,驱动以Shift-JIS编码发送字符串,但数据库对应字段使用UTF-8/utf8mb4字符集,编码不匹配导致抛出字符串格式错误。

解决方案
  • 永久修复方案:在JDBC连接URL中显式指定字符集为utf8mb4,修改后的连接配置如下:
spring.datasource.url=jdbc:mysql://localhost/${xpac.sql-database-name}?serverTimezone=Asia/Tokyo&characterEncoding=utf8mb4
  • 临时规避方案:将MySQL Connector/J版本回退至8.0.27,该方案不建议长期使用,显式指定连接参数可以避免后续版本升级带来的默认行为变更问题
  • 配套检查项:确认数据库实例、业务表、path字段的字符集均设置为utf8mb4,从服务端侧排除字符集配置隐患

内容的提问来源于stack exchange,提问作者francissoria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 23:12:24