天天看點

oracle用戶端亂碼

要解決Oracle的用戶端亂碼問題關鍵是要把伺服器端使用的字元集跟用戶端使用的字元集統一起來。Oracle用戶端(Sqlplus)通過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 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

PLSQL Developer之類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