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

Java使用MySQL Connector/J存储非ASCII俄文字符到MySQL时编码错误如何解决

问题排查与解决方案
  • 修正JDBC连接参数配置
    你当前使用的是MySQL Connector/J 8.x版本(对应驱动类com.mysql.cj.jdbc.Driver),characterEncoding参数值需严格写为UTF-8而非utf8,同时需补充时区参数避免高版本驱动的兼容性问题,参考连接串:
jdbc:mysql://demo.server.ru/project1?user=...&password=...&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Europe/Moscow

时区可根据你的数据库服务器实际时区调整。

  • 确认表字段实际编码
    仅确认库和表的排序规则不够,需单独校验字段的编码配置,执行以下SQL查看:
SHOW FULL COLUMNS FROM Pers1;

检查Collation列是否为utf8_general_ci或更推荐的utf8mb4_general_ci(兼容性更强,支持emoji等特殊字符),如果字段编码不符,需修改字段编码:

ALTER TABLE Pers1 MODIFY COLUMN FirstName VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE Pers1 MODIFY COLUMN LastName VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  • 排除查询客户端编码问题
    大部分情况下存储逻辑是正常的,乱码来自于查询数据用的客户端默认编码不是UTF-8:
    • 可先在Java代码中新增查询逻辑,将刚插入的数据取出后打印到控制台,若控制台输出正常,说明存储逻辑无问题,是查询客户端的配置问题
    • 若使用mysql命令行查询,执行查询前先运行SET NAMES utf8mb4;再查询验证
    • 若使用图形化客户端(如Navicat、DBeaver等),检查客户端的连接编码配置,将其设置为UTF-8/utf8mb4
  • 代码优化建议
    • 不要手动对字符串做编码转换,Java中String本身为Unicode编码,直接调用setString传入原始字符串即可,手动转码反而容易引入编码错误
    • 你代码中的stmt1.Close();存在大小写错误,Java方法名大小写敏感,正确写法为stmt1.close();
    • 建议在finally块中统一关闭连接、Statement资源,避免资源泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:06:03