当使用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。
任何线索/指针都将受到赞赏。感谢!!!
答案 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