【问题标题】:Problem reading special characters from teradata - JDBC从 teradata 读取特殊字符时出现问题 - JDBC
【发布时间】:2011-04-05 15:04:36
【问题描述】:

我使用 teradata,当使用 teradata 客户端运行时,以下查询输出“Altlüd”。

select name as name  from MYTABLE where selector=?

然而,当我尝试使用 java 客户端(带有 teradata 驱动程序的 jdbc)执行查询时,我得到“Altl?d”作为输出。我正在使用“UTF-8”字符集,我也尝试过拉丁字符集,但没有运气。

我也试过这个来解决问题。

while (rs.next()) {
 System.out.println(rs.getString(1));
 Reader rd = rs.getCharacterStream(1);
 int charr = rd.read();
 while (charr >= 0) {
    System.out.println(charr + " = " + ((char) charr));
    charr = rd.read();
 }
}

输出是

Altl?dersdorf 65 = 一个 108 = l 116 = 吨 108 = l 65533 = ? 100 = d

如果您查看生成的输出,spl 字符的 int 值是 65533,这不应该是这种情况。

事实上它为所有特殊字符返回 65533。

任何线索/指针将不胜感激。谢谢!!!

【问题讨论】:

  • Chedine, 如何为 teradata 驱动程序设置字符集为 LATIN9_OA?

标签: java jdbc teradata


【解决方案1】:

似乎是 Unicode 替换字符 U+FFFD。 JDBC 客户端和服务器不使用相同的字符编码。客户端似乎尝试了 UTF-8,但服务器确实提供了任何非 UTF 格式。

我不知道 teradata,但您应该查找任何数据库和/或服务器设置的编码和/或区域设置。

【讨论】:

    【解决方案2】:

    尝试使用 CHARSET=UTF-16 作为客户端参数。

    一种简单的方法是设置LC_ALL = LANG = en_US.UTF-16,然后运行您的Java 程序。

    【讨论】:

      【解决方案3】:

      使用 CHARSET=UTF16 代替 CHARSET=UTF-16,更多信息可以找到https://docs.teradata.com/reader/pk_W2JQRhJlg28QI7p0n8Q/tE40Yeyi9_0_~khKoRUbFA

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-12
        • 1970-01-01
        • 1970-01-01
        • 2010-11-14
        • 2011-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多