0

私は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を返します。

手がかり/ポインタがあれば幸いです。ありがとう!!!

4

3 に答える 3

0

クライアント側のパラメーターとして CHARSET=UTF-16 を使用してみてください。

簡単な方法の 1 つは、LC_ALL = LANG = en_US.UTF-16を設定してから、Java プログラムを実行することです。

于 2013-03-10T18:56:57.190 に答える
0

Unicode 置換文字のようU+FFFDです。JDBC クライアントとサーバーは、文字に対して同じエンコーディングを使用しません。クライアントは UTF-8 を試しているようですが、サーバーは非 UTF 形式を提供しています。

Teradata についてはわかりませんが、エンコーディングやロケールのデータベースやサーバーの設定を探す必要があります。

于 2010-08-30T06:55:11.530 に答える