从teradata读取特殊字符的问题 - JDBC

时间:2010-08-30 06:28:40

标签: java jdbc teradata

当使用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。

任何线索/指针都将受到赞赏。感谢!!!

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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