我使用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程序。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top