【问题标题】:French Characters getting converted into Special characters while saving in Database保存在数据库中的法语字符被转换为特殊字符
【发布时间】:2016-07-01 07:02:35
【问题描述】:

当通过 J2EE 应用程序保存时,在 DB 中保存文本“février.xlsx”会被保存为“février.xlsx”。

数据库版本:Oracle Database 11g Enterprise Edition Release 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)

保存到数据库之前的名称:février.xlsx

名称保存的数据库:février.xlsx

我尝试使用插入语句手动插入数据库。它插入正确,但从应用程序插入时不正确。

【问题讨论】:

  • 可能是您的应用程序将会话 NLS 字符集设置为不兼容的内容?您是否有任何方法可以验证应用程序的 NLS 设置?

标签: oracle hibernate jpa oracle11g


【解决方案1】:

困难始终在于确定是错误的值存储在数据库中还是正确的值存储在数据库中。显示检索到的值时总是有可能发生错误。

Oracle 有函数 dump()。

select dump(column),column from table;

这将向您显示实际存储在数据库中的字节值。使用它,您可以检查这些值是否是给定您要存储的字符和数据库字符集的正确值。

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

【讨论】:

    猜你喜欢
    • 2019-11-04
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 2014-02-28
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多