甲骨文写日文字符

Posted

技术标签:

【中文标题】甲骨文写日文字符【英文标题】:Oracle write Japanese characters 【发布时间】:2018-09-03 09:05:14 【问题描述】:

我们目前使用的是 Oracle 12,无法将日文字符插入到具有 NVARCHAR2(255 CHAR) 类型的列的表中,结果始终为“¿¿¿¿¿¿¿¿¿¿ ¿¿¿¿¿¿”。我们尝试使用 SQL Developer、Java 程序甚至存储过程插入数据,但我们总是得到相同的结果。

select * from nls_database_parameters;

NLS_RDBMS_VERSION   12.2.0.1.0
NLS_NCHAR_CONV_EXCP FALSE
NLS_LENGTH_SEMANTICS    BYTE
NLS_COMP    BINARY
NLS_DUAL_CURRENCY   $
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_TIME_TZ_FORMAT  HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_FORMAT    DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_SORT    BINARY
NLS_DATE_LANGUAGE   AMERICAN
NLS_DATE_FORMAT DD-MON-RR
NLS_CALENDAR    GREGORIAN
NLS_NUMERIC_CHARACTERS  .,
NLS_NCHAR_CHARACTERSET  AL16UTF16
NLS_CHARACTERSET    WE8DEC
NLS_ISO_CURRENCY    AMERICA
NLS_CURRENCY    $
NLS_TERRITORY   AMERICA
NLS_LANGUAGE    AMERICAN

编辑 1:我不能只更改数据库参数,DBA 不想这样做。

【问题讨论】:

尝试将 NLS_CHARACTERSET 更改为 AL32UTF8 并将您的日文字符存储在 VARCHAR2 本身中。这应该可以帮助你 - alter database character set AL32UTF8; @SudiptaMondal, alter database character set AL32UTF8 不受 Oracle 支持,您不应使用它。遵循 Oracle 的官方指南Character Set Migration 也许这个可以帮助Globalization Support @WernfriedDomscheit 不知道,谢谢。我认为我们可以在 12c 中使用 alter database 更改字符集。 我可以看到您已经尝试了几个客户端,但是您确定问题出在插入的数据上,而不是那些客户端在查询时如何显示它? dump(<column>, 1016) 向您展示了什么?插入时如何提供值? 【参考方案1】:

我修复了这个问题,在查看了 Oracle 驱动程序后,我发现了一个默认禁用的选项:https://docs.oracle.com/cd/E11882_01/appdev.112/e13995/oracle/jdbc/OracleDriver.html

在启动应用程序时将其设置为true后,它设法将日文字符存储在数据库中:-Doracle.jdbc.defaultNChar=true

【讨论】:

以上是关于甲骨文写日文字符的主要内容,如果未能解决你的问题,请参考以下文章

sql 甲骨文把逗号分割的字符串转换为可放入中的条件语句的字符数列

如何在查询中使用别名字段? (甲骨文10g)

ORA-01722: 无效编号 当我尝试执行存储过程时。甲骨文错误

如何执行已经存在的 PL/SQL。 (甲骨文 APEX 21.1)

甲骨文(Oracle)面试题目

甲骨文 maf 和甲骨文 af