2016-03-15 93 views
0

通過J2EE應用程序保存時,將數據庫中的文本「février.xlsx」保存爲「f?vrier.xlsx」。保存在數據庫中時將法文字符轉換爲特殊字符

DB版本:Oracle數據庫11g企業版發佈11.2.0.4.0

NLS_CHARACTERSET - AL32UTF8

NLS_NCHAR_CHARACTERSET - AL16UTF16

public DocumentModel save(DocumentModel model) { 
        DocumentModel docModel = null; 
        try { 
         LOGGER.info("Name before saving into DB :"+model.getDocumentFileName()); 
         docModel = entityManager.merge(model); 
        } catch (Exception exp) { 
         LOGGER.error("Exception occured"); 
          } 
        return docModel; 
      } 

列數據類型表:VARCHAR2(256 CHAR)

保存到DB之前的名稱:février.xlsx

名稱保存的數據庫:février.xlsx

我試圖用插入語句手動插入數據庫。它正在插入正確,但從應用程序插入它不正確。

+0

難道說您的應用程序設置會話NLS字符集的東西是不兼容?您是否有任何方法來驗證應用程序的NLS設置? – Steve

回答

0

難度始終在於確定錯誤值是否存儲在數據庫中,或者如果正確的值存儲在數據庫中。顯示檢索值時總會有錯誤發生。

Oracle具有dump()函數。

select dump(column),column from table; 

這將顯示字節值,因爲它們實際上存儲在數據庫中。使用這個,你可以檢查這些值是否是給定要存儲的字符和數據庫字符集的正確值。

http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions055.htm#SQLRF00635