Kar*_*rlP 6 java oracle unicode nvarchar sqlplus
在oracle数据库中插入字符串时,一些国家字符会被问号替换,即使它们插入NCHAR或NVARCHAR列 - 应该能够处理所有Unicode字符.
使用Oracle的SQL Developer,sqlplus或使用JDBC驱动程序会发生这种情况.
数据库NLS_CHARACTERSET设置为WE8ISO8859P1(西欧iso-8859-1).用于NCHAR列的NLS_NCHAR_CHARACTERSET设置为AL16UTF16.(UTF-16)
任何不在NLS_CHARACTERSET中的字符似乎都被替换为反转的问号.
Kar*_*rlP 21
编辑:请注意,在Oracle上处理UTF的最佳方法是使用数据库字符集AL32UTF8创建数据库,并使用普通的varchar2列.使用nchar列的一个问题是,当默认情况下将参数作为nchar发送时,oracle不能使用普通char/varchar2列的索引.
无论如何:如果你不能转换数据库:
首先,unicode文字需要以'n'为前缀,如下所示:
select n'Language - Språk - J?zyk' from dual;
Run Code Online (Sandbox Code Playgroud)
*)8位编码无法处理此文本
不幸的是,这还不够.
出于某种原因,数据库客户端的默认行为是将所有字符串文字转换为数据库字符集,这意味着即使在数据库看到字符串之前,也会更改值.
客户端需要一些配置才能将unicode字符插入NCHAR或NVARCHAR列:
Unix上的SQL Plus
这些environemnet变量设置unix环境和sqlplus使用UTF-8文件,并配置sqlplus以在unicode中发送字符串文字.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
LC_CTYPE="en_US.UTF-8"
ORA_NCHAR_LITERAL_REPLACE=true
Run Code Online (Sandbox Code Playgroud)
(en_US.UTF-8适用于Solaris - Linux或其他系统可能需要不同的字符串,用于locale -a
列出支持的语言环境.)
JDBC驱动程序
使用Oracles JDBC驱动程序的应用程序需要定义以下系统属性,以便在unicode中发送字符串文字.
-Doracle.jdbc.defaultNChar=true
-Doracle.jdbc.convertNcharLiterals=true
Run Code Online (Sandbox Code Playgroud)
SQL Developer
找到sqldeveloper.conf,并添加以下行:
AddVMOption -Doracle.jdbc.defaultNChar=true
AddVMOption -Doracle.jdbc.convertNcharLiterals=true
Run Code Online (Sandbox Code Playgroud)
Microsoft Windows上的SQL Plus
如果Microsoft Windows上的SQLplus或Toad完全处理utf-8,我还没试过.Sqlplusw.exe可能会这样做,并且以下注册表设置可能会起作用.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
ORA_NCHAR_LITERAL_REPLACE=true
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14160 次 |
最近记录: |