无法修改MySQL latin1配置时如何通过JDBC正确读取中文数据
解决方案
可通过JDBC连接参数配置+手动编码转换的组合方式解决,无需修改库表原有配置:
1. 调整JDBC连接参数
在JDBC连接URL中新增以下参数,关闭JDBC默认的自动字符集转换逻辑:
useUnicode=false&characterEncoding=latin1
完整URL示例:
jdbc:mysql://<数据库地址>:<端口>/<库名>?useUnicode=false&characterEncoding=latin1
2. 手动做编码转换
从ResultSet中读取到字符串后,手动将Latin1编码的字节转回中文写入时使用的原始编码(通常为UTF-8/GBK):
// 读取结果集中的原始字符串 String rawStr = resultSet.getString("目标字段名"); // 先按Latin1解码拿到原始字节,再用写入时的编码转回正确中文 String correctStr = new String(rawStr.getBytes("ISO-8859-1"), "UTF-8");
若你写入中文时使用的是GBK编码,将上述代码中的
UTF-8替换为GBK即可。
原理解释
乱码的本质是中文写入时被按Latin1规则存储,JDBC默认读取时会自动用服务端或连接指定的非Latin1编码做转换,导致字节信息匹配错误。通过指定JDBC按Latin1原封不动读取存储的字节,再手动转成写入时用的编码,即可还原出正确的中文内容。
内容的提问来源于stack exchange,提问作者R Nanthak
相关产品推荐
相关产品推荐

