問題の読み取り問題Teradata -JDBCの特殊文字
質問
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を返します。
手がかり/ポインターは大歓迎です。ありがとう!!!
解決
Unicode置換文字のようです U+FFFD
. 。 JDBCクライアントとサーバーは、文字に同じエンコードを使用しません。クライアントはUTF-8を試しているようですが、サーバーはUTF以外の形式を提供します。
Teradataは知りませんが、エンコードやロケールのデータベースおよびサーバー設定を探す必要があります。
他のヒント
Charset = utf-16をクライアント側パラメーターとして使用してみてください。
簡単な方法の1つは、設定することです lc_all = lang = en_us.utf-16 そして、Javaプログラムを実行します。
所属していません StackOverflow