2016-03-15 55 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