編輯:請注意,在Oracle上處理UTF的最佳方法是使用數據庫字符集AL32UTF8創建數據庫,並使用普通的varchar2列。使用nchar列的問題之一是,默認情況下,當參數作爲nchar發送時,oracle不能使用普通char/varchar2列的索引。
總之:如果你不能將數據庫轉換:
首先,統一文字,需要使用一個 'N' 爲前綴,像這樣:
select n'Language - Språk - Język' from dual;
*) 8位編碼無法處理此文本
不幸的是,這還不夠。
由於某些原因,數據庫客戶端的默認行爲是將所有字符串文本轉換爲數據庫字符集,即數據庫查看字符串之前即會更改值。
的客戶需要以一些配置能夠插入Unicode字符爲NCHAR或nvarchar列:
SQL加上Unix的
這些environemnet變量設置UNIX環境和SQLPLUS要使用UTF-8文件, 並且還要配置sqlplus以unicode發送字符串文字。
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
LC_CTYPE="en_US.UTF-8"
ORA_NCHAR_LITERAL_REPLACE=true
(是en_US.UTF-8是用於Solaris - Linux或其他系統可能需要不同的字符串,用locale -a
列出支持的語言環境)
JDBC驅動程序使用甲骨文JDBC
應用驅動程序需要定義以下系統屬性以在unicode中發送字符串文字。
-Doracle.jdbc.defaultNChar=true
-Doracle.jdbc.convertNcharLiterals=true
SQL開發
找到的SQLDeveloper。CONF,並添加以下行:
AddVMOption -Doracle.jdbc.defaultNChar=true
AddVMOption -Doracle.jdbc.convertNcharLiterals=true
SQL加在Microsoft Windows
如果sqlplus中在Microsoft Windows或蟾蜍處理UTF-8在所有我還沒有試過。 Sqlplusw.exe可能會這樣做,並且以下注冊表設置可能會有所斬獲。
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
ORA_NCHAR_LITERAL_REPLACE=true
我自己回答這個問題,因爲我已經花了一個星期搞清楚了這一點。我希望谷歌認爲它... – KarlP
注意的好辦法在Oracle上支持UTF8,就是使用數據庫字符集AL32UTF8創建數據庫,並使用普通的varchar2列。 – KarlP