一、
個人實踐:加了一個環境變量NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
成功了
方法:
設置好環境變量後,在 PLSQL Developer 的目錄中創建start.bat文件。
以下是start.bat的內容:
@echo off
set path=D:\oracle\product\instantclient_10_2
set ORACLE_HOME=D:\oracle\product\instantclient_10_2
set TNS_ADMIN=D:\oracle\product\instantclient_10_2
set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
start plsqldev.exe
啓動plsql時直接點擊這個腳本
TNS_ADMIN=D:\oracle\product\instantclient_10_2
這環境變量如果沒有的話,在我的電腦,屬性,高級,環境變量,中添加(我用的是oracle精簡版客戶端)
如果是非精簡版的建議修改註冊表:運行-》regedit->HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraClient10g_home1/NSL_LANG,倒數第二個參數可能不一樣,改成
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
這個可能是oracle客戶端和服務器端的編碼方式不一樣。
SQL> select * from v$nls_parameters t where t.PARAMETER
='NLS_LANGUAGE' or t.PARAMETER ='NLS_CHARACTERSET';
PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
NLS_LANGUAGE
SIMPLIFIED CHINESE
NLS_CHARACTERSET
ZHS16GBK
--數據庫服務器字符集
SQL> select * from nls_database_parameters;
PARAMETER
------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_LANGUAGE
AMERICAN
--客戶端字符集
--表示客戶端的字符集的設置,可能是參數文件,環境變量或者是註冊表
SQL> select * from nls_instance_parameters;
PARAMETER
------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_LANGUAGE
AMERICAN
--會話字符集的設置,這個沒有特殊設置的話,和nls_instance_parameters一致;
SQL> select * from nls_session_parameters;
PARAMETER
------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_LANGUAGE
SIMPLIFIED CHINESE
二、
如果數據庫服務器端的編碼和客戶端字符集編碼不一樣,則會導致亂碼,因此需要更改客戶端的編碼方式。
更改客戶端的編碼方式有兩種方式,第一種是更改註冊表,這個比較危險,就不在這裏提及。第二種是設置環境變量。
設置環境變量,新建一個環境變量:NLS_LANG,值是:AMERICAN.ZHS16GBK。
值的構成方式是數據庫中查詢的服務器端的“NLS_LANGUAGE的值”+“.”+“NLS_CHARACTERSET的值”
如果是其他的客戶端,如putty和ssh client,xmanager等的話也是要設置環境變量
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
這個環境變量只會改變nsl_session_parameters的值,不會改變nls_data_parameters和nls_instance_parameters的參數值
eg:
SQL> select name from menu;
NAME
--------------------
意義
北京