Oracle SQL Developer客户端编码

mae*_*tro 3 oracle plsql character-encoding oracle-sqldeveloper

我阅读了许多相关的stackoverflow主题,我花了一整天的时间来讨论以下问题,但我没有找到任何有用的东西,但问题似乎没有得到满足.

我有一个Oracle数据库.让我们看看以下PL/SQL脚本:

CREATE TABLE Dummy(
   id number(19,0),
   tclob clob,
   tnclob nclob,
   PRIMARY KEY (id));

INSERT INTO dummy (id, tclob, tnclob) VALUES (1, 'ñ$ߤ*>;''<’', 'ñ$ߤ*>;''<’');
SELECT tclob, tnclob FROM dummy;
Run Code Online (Sandbox Code Playgroud)

我的问题是''​​'和'''字符存储为问号.我还试图通过JAVA加载以前插入的值,但我得到问号而不是特殊字符.

我创建了一个小型JAVA方法,它使用OraclePreparedStatement来保存测试数据,我使用setNString()方法将nclob数据附加到查询中.在这种情况下,所有字符在JAVA和SqlDeveloper中都可以正常显示.

因此,一种可能的解决方案是使用JAVA将我的数据保存到数据库中.我有几千行SQL脚本插入数据,我不想在java中再次编写整个东西.

所以问题是:为什么sqldeveloper打破了特殊字符?

我的设置:

SELECT DECODE(parameter, 'NLS_CHARACTERSET', 'CHARACTER SET',
'NLS_LANGUAGE', 'LANGUAGE',
'NLS_TERRITORY', 'TERRITORY') name,
value from v$nls_parameters
WHERE parameter IN ( 'NLS_CHARACTERSET', 'NLS_LANGUAGE', 'NLS_TERRITORY')
Run Code Online (Sandbox Code Playgroud)

结果:

NAME          VALUE
------------- -------------
LANGUAGE      HUNGARIAN
TERRITORY     HUNGARY
CHARACTER SET EE8ISO8859P2
Run Code Online (Sandbox Code Playgroud)

我将SqlDeveloper/Preferences/Environment/Encoding更改为UTF-8.我还将HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1值更改为HUNGARIAN_HUNGARY.UTF8

更新:我尝试使用以下语法插入数据:

INSERT INTO dummy (id, tclob, tnclob) VALUES (1, N'ñ$ߤ*>;''<’', N'ñ$ߤ*>;''<’');
INSERT INTO dummy (id, tclob, tnclob) VALUES (1, 'ñ$ߤ*>;''<’', to_nclob('ñ$ߤ*>;''<’'));
Run Code Online (Sandbox Code Playgroud)

什么都没有帮助.

那我该怎么办?

Moh*_*ari 5

在安装了PLSQL的PC上,将NLS_LANGregistery条目的值设置为等于PC的operation system locale (code page)等效值.

如何检测操作系统语言区域设置?
如何将OS语言环境映射到NLS_LANG值?

使用PLSQL时,从NLS_LANG注册表项中读取创建Oracle会话所需的客户端语言的初始参数.

由于Oracle文档,数据库中通常会出现无效数据,因为客户端上未正确设置NLS_LANG参数.NLS_LANG值应反映客户端操作系统代码页.
例如,在英语Windows环境中,代码页为WE8MSWIN1252.正确设置NLS_LANG参数后,数据库可以自动将来自客户端操作系统的传入数据转换为其编码.

使用JAVA方法时,客户端语言参数由"控制面板"中的"区域和语言选项"下的值设置,因此事情就可以了.