编辑:请注意,在Oracle上处理UTF的最佳方法是使用数据库字符集AL32UTF8创建数据库,并使用普通的varchar2列。使用nchar列的问题之一是,默认情况下将参数作为nchar发送时,oracle无法为普通char
/ varchar2列使用索引。
无论如何:如果您不能转换数据库:
首先,unipre字面量需要以“ n”作为前缀,如下所示:
select n'Language - Språk - Język' from dual;
*)8位编码无法处理此文本
不幸的是,这还不够。
由于某种原因,数据库客户端的默认行为是将所有字符串文字转换为数据库字符集,这意味着即使在数据库看到字符串之前,值也将被更改。
客户端需要一些配置,以便能够将Unipre字符插入NCHAR或NVARCHAR列:
Unix上的SQL Plus
这些environemnet变量将Unix环境和sqlplus设置为使用UTF-8文件,还将sqlplus配置为以unipre发送字符串文字。
NLS_LANG=AMERICAN_AMERICA.AL32UTF8LC_CTYPE="en_US.UTF-8"ORA_NCHAR_LITERAL_REPLACE=true
(en_US.UTF-8用于Solaris-Linux或其他系统可能需要不同的字符串,用于
locale -a列出支持的语言环境。)
JDBC驱动程序
使用Oracle JDBC驱动程序的应用程序需要定义以下系统属性,才能以unipre发送字符串文字。
-Doracle.jdbc.defaultNChar=true -Doracle.jdbc.convertNcharLiterals=true
SQL开发人员
找到sqldeveloper.conf,并添加以下行:
AddVMOption -Doracle.jdbc.defaultNChar=true AddVMOption -Doracle.jdbc.convertNcharLiterals=true
Microsoft Windows上的SQL Plus
我没有尝试过Microsoft
Windows或Toad上的SQLplus是否完全可以处理utf-8。Sqlplusw.exe可能会这样做,而以下注册表设置可能会成功。
NLS_LANG=AMERICAN_AMERICA.AL32UTF8ORA_NCHAR_LITERAL_REPLACE=true



