2017-07-27 24 views
0

在數據庫中AptNumber的值=1º,但使用select查詢時返回AptNumber = 1 so,所以在選擇º更改爲使用JdbcTemplate從數據庫中正確返回的特殊字符

Aplication:彈簧批處理 使用:JdbcTemplate的連接DB 數據的基礎上:甲骨文 QUERTY:從CUST_ADDR選擇APT_NBR WHERE CUST_ADDR_ID = 12345;

+0

你從CUST_ADDR中選擇DUMP(APT_NBR,1016)WHERE CUST_ADDR_ID = 12345;'? –

+0

什麼是數據庫的字符集? (SELECT * FROM V $ NLS_PARAMETERS WHERE PARAMETER LIKE'%CHARACTERSET';' –

+0

奇怪的是,如果你得到'슺'([U + C2BA](https://codepoints.net/U+C2BA) HANGUL SYLLABLE SEUJ),那麼我會說:你的DB將字符存儲爲UTF-8(或AL32UTF8),但是你的java設置爲UTF-16 –

回答

0

º是性格U+00BA: MASCULINE ORDINAL INDICATOR

您的數據庫字符集是US7ASCII,這組不支持º因此,不能將它。

您的數據庫設置爲US7ASCII,但您的Java使用UTF-16。 Java將0x00 0xBA發送到數據庫。我不知道爲什麼,但是這被轉換爲0xFF 0xBA,當編碼爲UTF-16時,它是U+FFBA HALFWIDTH HANGUL LETTER CHIEUCH

你可以做以下事情。

  • 使用NVARCHAR2數據類型而不是VARCHAR2。通常,國家字符集是支持所有Unicode字符的Unicode集合。
  • 遷移數據庫爲Unicode,看到Character Set Migration
  • 我的另一個想法是使用°U+00B0: DEGREE SIGN的解決方法。但是它也不受ASCII支持。