天天看點

Oracle資料庫字元集和用戶端字元集不同,強制轉化可能會造成不可預期的後果

用PL/SQL Developer登陸Oracle資料庫,輸入使用者名和密碼後報:資料庫字元集(AL32UTF8)和用戶端字元集(2%)是不同的,字元集轉化可能會造成不可預期的後果。

解決:

windows 

regedit

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\ 找到這個

輕按兩下 NLS_LANG 使值為 american_america.AL32UTF8

右擊電腦屬性 

建立系統變量

名字  NLS_LANG

值:  american_america.AL32UTF8

再次登入 OK 

1. NLS_LANG 參數組成

NLS_LANG參數由以下部分組成:

NLS_LANG=<Language>_<Territory>.<Clients Characterset>

NLS_LANG各部分含義如下:

LANGUAGE指定:

-Oracle消息使用的語言

-日期中月份和日顯示

TERRITORY指定

-貨币和數字格式

-地區和計算星期及日期的習慣

CHARACTERSET:

-控制用戶端應用程式使用的字元集

通常設定或者等于用戶端(如Windows)代碼頁 

或者對于unicode應用設定為UTF8

在Windows上檢視目前系統的代碼頁可以使用chcp指令:

E:\>chcp

 活動的代碼頁: 936

代碼頁936也就是中文字元集 GBK,在Microsoft的官方站點上,

我們可以遭到關于936代碼頁的具體編碼規則,請參考以下連結:

<a target="_blank" href="http://www.microsoft.com/globaldev/reference/dbcs/936.htm">http://www.microsoft.com/globaldev/reference/dbcs/936.htm</a>

2. 檢視 NLS_LANG 的方法

Windows使用:

echo %NLS_LANG%

如:

E:\&gt;echo %NLS_LANG%

AMERICAN_AMERICA.ZHS16GBK

Unix使用:

env|grep NLS_LANG

/opt/oracle&gt;env|grep NLS_LANG

NLS_LANG=AMERICAN_CHINA.ZHS16GBK

Windows用戶端設定,可以在系統資料庫中更改NLS_LANG,具體鍵值位于:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\

xx指存在多個ORACLE_HOME時系統編号。

3. 檢視資料庫目前字元集參數設定

SELECT * FROM v$nls_parameters;

select * from nls_database_parameters

select userenv(‘language’) from dual;

4. 檢視資料庫可用字元集參數設定

SELECT * FROM v$nls_valid_values;

5. 用戶端 NLS_LANG 的設定方法

Windows:

# 常用中文字元集

set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

# 常用unicode字元集

set NLS_LANG=american_america.AL32UTF8

可以通過修改系統資料庫鍵值永久設定

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\NLS_LANG

Unix:

export NLS_LANG=american_america.AL32UTF8

export NLS_LANG="Simplified Chinese_china".ZHS16GBK

可以編輯 bash_profile 檔案進行永久設定

vi .bash_profile

NLS_LANG="Simplified Chinese_china".ZHS16GBK export NLS_LANG

# 使 bash_profile 設定生效

source .bash_profile