天天看點

oracle顯示中文亂碼oracle顯示中文亂碼

oracle顯示中文亂碼

問題描述:

windows下安裝oralce用戶端,編碼為

SIMPLIFIED CHINESE_CHINA.AL32UTF8

redhat6下安裝oracle 11g rac服務端,編碼為

AMERICAN_AMERICA.AL32UTF8

用戶端插入中文資料,服務端顯示亂碼,用戶端顯示正常

服務端插入中文資料,服務端顯示亂碼,用戶端顯示亂碼

分析:

導緻中文亂碼的産生的原因是用戶端和服務端的編碼字元集不統一。資料傳輸過程的字元集轉換取決于參數NLS_LANG。前提是服務端的字元集是用戶端字元集的超集。

如果用戶端和服務端的NLS_LANG設定相同,則不會發生字元集轉換,就會造成用戶端插入的中文資料顯示正常,但是在伺服器為亂碼。

解決:

由下面的檢查發現是由于服務端未設定NLS_LANG參數,導緻服務端的sqlplus操作插入和查詢(相當于自己同時也是用戶端)時不能合适的轉換中文資料

NLS_LANG參數由以下部分組成:

NLS_LANG=_.

NLS_LANG各部分含義如下:

LANGUAGE指定:

-Oracle消息使用的語言

-日期中月份和日顯示

TERRITORY指定

-貨币和數字格式

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

CHARACTERSET:

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

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

或者對于unicode應用設定為UTF8

1.檢視系統編碼:

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

C:\Users\lizer>chcp

活動代碼頁: 936

代碼頁936也就是中文字元集GBK,在Microsoft的官方站點上,我們可以遭到關于936代碼頁的具體編碼規則,請參考以下連結:

http://www.microsoft.com/globaldev/reference/dbcs/936.htm

2)在Linux下

[root@rac1 ~]# cat /etc/sysconfig/i18n

LANG=”en_US.UTF-8”

SYSFONT=”latarcyrheb-sun16”

2.檢視NLS_LANG的方法

1)Windows下

C:\Users\lizer>echo %NLS_LANG%

SIMPLIFIED CHINESE_CHINA.AL32UTF8

[oracle@rac1 ~]$ env|grep NLS_LANG

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;

set pages 120

col parameter for a30

col value for a40

用戶端參數檢查:

SYS@rac_orcl> select userenv(‘language’) from dual;

USERENV('LANGUAGE')

--------------------------------------------------------------------------------

服務端參數檢查:

SYS@orcl1> select userenv(‘language’) from dual;

USERENV('LANGUAGE')

----------------------------------------------------

AMERICAN_AMERICA.AL32UTF8

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

SELECT * FROM v$nls_valid_values;

5.用戶端NLS_LANG 的設定方法

1)Windows:

# 常用中文字元集

set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

# 常用unicode字元集

set NLS_LANG=american_america.AL32UTF8

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

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\NLS_LANG

2)Linux:

# 常用unicode字元集

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

or

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

# 使bash_profile 設定生效

source .bash_profile