【发布时间】:2016-02-11 11:22:50
【问题描述】:
我正在使用带有 ISO-8859-1 数据的 Oracle 数据库。 当我尝试使用 ResultSet 从此数据库中获取字符串并将结果打印到控制台时,我得到了错误的编码输出。
Locale.getDefault(); // -> fr_FR
Charset.defaultCharset(); // -> UTF-8
但我试图从我的ResultSet 打印这些数据:
rs.getString("MY_COL"); // direct from ResultSet
new String(rs.getString("MY_COL").getBytes(Charset.forName("ISO-8859-15")), Charset.forName("UTF-8")); // convert ISO bytes to UTF-8 bytes
这个输出:
générale
générale
那么,为什么 Oracle JDBC 驱动程序使用 ISO-8859-1 字节编码创建字符串? 如何在不更改数据库(也不转换字符串)的情况下使用 UTF-8 字节编码获取字符串? 我可以从 JMV args 的驱动程序配置中更改它吗?
【问题讨论】:
-
也有可能是字符串在数据库中存储不正确。
-
如何验证?
-
查看SQL*plus、toad或其他工具中的值?
-
执行下面的select
select dump(my_col) from my_table获取存储在数据库中的字节数。 -
stackoverflow.com/a/18080993/836215 - 检查数据库内部编码