0

我使用 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 = A 108 = l 116 = t 108 = l 65533 = ? 100 = d

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

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

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

4

3 回答 3

0

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

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

于 2010-08-30T06:55:11.530 回答
0

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

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

于 2013-03-10T18:56:57.190 回答
0

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

于 2020-05-15T10:57:11.923 回答