2010-08-30 126 views
0

当使用Teradata客户端运行时,我使用Teradata并查询下面的输出“Altlüd”。从teradata读取特殊字符时出现问题 - JDBC

select name as name from MYTABLE where selector=? 

然而,我得到“Altl?d”作为输出,当我尝试使用Java客户端(JDBC和Teradata驱动程序)来执行查询。我使用的是“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 = 1 116 = T 108 = 1 65533 =? 100 = d

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

Infact对所有特殊字符返回65533。

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

+0

Chedine,如何将字符集设置为用于teradata驱动程序的LATIN9_OA? – hirentshah 2011-10-05 06:58:27

回答

0

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

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

+0

是的。将charset指定为LATIN9_OA解决了这个问题 – chedine 2010-08-30 07:53:27

0

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

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