2012-02-03 95 views
1

我們有一個使用UTF-8(NLS_CHARACTERSET = AL32UTF8)的Oracle數據庫。 然後,我們在使用Hibernate的Glassfish中有一個J2EE應用程序。Oracle DB,Glassfish,休眠和字符編碼

使用SQL Plus或SQL Developer時,我們可以正確讀寫數據,但我們無法以編程方式獲取特殊字符。

讀取一個ä我們得到√§

看着我試過類似的問題:

  • 調整Hibernate屬性

    <property name="hibernate.connection.characterEncoding" value="utf8" /> 
    

  • 加入defaultNChar=true連接支柱erty在Glassfish的

  • 通過Hibernate

    <property name="hibernate.connection.defaultNChar" value = "true"/> 
    
  • 設置的字符集添加defaultNChar連接屬性設置爲utf8

    <property name="hibernate.connection.charSet" value="utf8" /> 
    

但我還是沒能得到任何字符,其不是基本的ASCII。

任何暗示我做錯了什麼?

編輯:與得到我的意思是使用select語句獲取。使用調試器進行檢查,或者使用斷言與正確的(例如,"ä")字符串進行比較。

+0

你能定義「get」嗎?你無法查看字符,或者無法從數據庫中選擇它們嗎? – Ben 2012-02-05 17:41:50

+0

@Ben:你是對的:我編輯了澄清問題。選擇該值並以編程方式或使用調試器進行檢查。 – Matteo 2012-02-05 19:08:14

+0

@Matteo是nvarchar字段中的數據嗎? – tbone 2012-02-06 20:12:57

回答

0

正如評論中所述,我意識到這個問題沒有意義,因爲在數據庫連接中實際上沒有問題。正如meta-discussion中所建議的那樣,我正在解釋這是一個答案。

0

你沒有在數據源聲明中提到你的連接URL。您是否嘗試在連接網址上設置編碼?

jdbc:mysql:// localhost:3306/yourDB? useUnicode = true & characterEncoding = UTF-8

我無法測試oracle,但是對於mysql,它解決了問題。

+1

URL中的編碼是MySQL的具體。 Oracle JDBC驅動程序不允許它(URL格式:'jdbc:oracle:thin:@ // [HOST] [:PORT]/SERVICE')。 – Matteo 2012-02-06 06:55:14

1

正如在使用NVARCAR的原始問題的註釋中所討論的那樣,添加到Hibernate配置文件中的以下行似乎可行。

<property name="hibernate.connection.defaultNChar">true</property> 

它爲我做了。