2010-08-30 109 views
0

當使用Teradata客戶端運行時,我使用Teradata並查詢下面的輸出「Altlüd」。從teradata讀取特殊字符時出現問題 - JDBC

select name as name from MYTABLE where selector=? 

然而,我得到「Altl?d」作爲輸出,當我嘗試使用Java客戶端(JDBC和Teradata驅動程序)來執行查詢。我使用的是「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 = 1 116 = T 108 = 1 65533 =? 100 = d

如果您查看生成的輸出,spl字符的int值是65533,不應該如此。

Infact對所有特殊字符返回65533。

任何線索/指針將不勝感激。謝謝!!!

+0

Chedine,如何將字符集設置爲用於teradata驅動程序的LATIN9_OA? – hirentshah 2011-10-05 06:58:27

回答

0

好像是Unicode替換字符U+FFFD。 JDBC客戶端和服務器不使用相同的字符編碼。客戶似乎嘗試UTF-8,但服務器確實提供任何非UTF格式。

我不知道teradata,但您應該查找編碼和/或語言環境的任何數據庫和/或服務器設置。

+0

是的。將charset指定爲LATIN9_OA解決了這個問題 – chedine 2010-08-30 07:53:27

0

嘗試使用CHARSET = UTF-16作爲客戶端參數。

一個簡單的方法是設置LC_ALL = LANG = en_US.UTF-16,然後運行您的Java程序。