阅读Teradata的特殊字符的问题 - JDBC
题
我使用Teradata和以下查询输出“Altlüd”使用Teradata客户端运行时。
select name as name from MYTABLE where selector=?
鉴于,当我尝试使用Java客户端(带有Teradata驱动程序的JDBC)执行查询时,我将获得“ Altl?d”为输出。我正在使用“ UTF-8” Charset,并且我还尝试了拉丁字符,没有运气。
我也尝试过这种故障排除。
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。
任何线索/指针都将不胜感激。谢谢!!!
解决方案
似乎是Unicode替换字符 U+FFFD
. 。 JDBC客户端和服务器不为字符使用相同的编码。客户端似乎尝试使用UTF-8,但是服务器确实提供了任何非UTF格式。
我不知道Teradata,但是您应该为编码和/或语言环境寻找任何数据库和或服务器设置。
其他提示
尝试将Charset = UTF-16用作客户端参数。
一种简单的方法是设置 lc_all = lang = en_us.utf-16 然后运行您的Java程序。
不隶属于 StackOverflow