設定NLS_LANG引數

myownstars發表於2012-02-23

 

NLS_LANG

設定客戶端字符集,格式:_.

注:前兩個引數與characterset並無直接關聯 ,如JAPANESE_JAPAN.WE8MSWIN1252實際並不允許儲存日文

Character並不改變客戶端的字符集,只是讓ORACLE知道客戶端在用什麼字符集以便進行字元轉換

如果客戶端NLS_LANG設定的字符集同資料庫(NLS_CHARACTERSET)的一樣,那麼在資料互動的時候將不嘗試字元轉換,由此可能會造成亂碼。

 

設定NLS_LANG

UNIX

只需在命令列設定NLS_LANG變數即可

 

WINDOWS

Oracle安裝時預設會在登錄檔中設定,10g的路徑如下HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_

也可在DOS命令列使用set NLS_LANG=,會覆蓋登錄檔中的值

檢視NLS_LANG

SQL> host echo %NLS_LANG%

返回當前環境中設定值,如果沒有結果,則檢視登錄檔中的值

SQL> @.[%NLS_LANG%].

若登錄檔已設定該變數,則返回unable to open file ".[ENGLISH_UNITED KINGDOM.WE8MSWIN1252].";反之則unable to open file ".[%NLS_LANG%]."

注:the @.[%NLS_LANG%]. "trick" reports the NLS_LANG known by the sqlplus executable, it will not read the registry itself. But then you are not sure if the variable is set in the environment or in the registry. That's the reason of checking with the host command first

 

 

檢視資料庫使用的字符集

select value from NLS_DATABASE_PARAMETERS where parameter='NLS_CHARACTERSET';

 

使用dblink時,對於char/varchar2/long/clob型別,將由源庫的nls_characterset向目標庫的nls_characterset轉換;nchar/nvarchar2/nclob則使用nls_nchar_characterset引數轉換;兩種情形下都不會用到

NLS_LANG引數。

 

唯一能夠相容所有字元的nls_charactersetUTF8/AL32UTF8

 

 

亂碼問題

當查詢資料顯示亂碼時,有三種可能:

1 插入資料時環境變數設定有問題

2 資料庫端字符集不支援插入的字元

3 查詢時的環境變數設定問題

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-717021/,如需轉載,請註明出處,否則將追究法律責任。

相關文章