oracle數據庫字符集、服務器字符集、客戶端字符集



一:實際數據庫是使用v$nls_parameters中的設置:
select * from v$nls_parameters t where t.PARAMETER ='NLS_LANGUAGE' or t.PARAMETER ='NLS_CHARACTERSET';
等於:
select userenv('language') from dual;

數據庫字符集nls_database_parameters其來源於props$,是表示數據庫的字符集:
select * from nls_database_parameters t where t.PARAMETER ='NLS_LANGUAGE' or t.PARAMETER ='NLS_CHARACTERSET';

字符集設置:
alter database character set INTERNAL_USE ZHS16GBK;
alter database character set ZHS16GBK;

二:數據庫服務器字符集UNIX:
查看:
locale
echo $NLS_LANG
env | grep NLS_LANG
設置:
export  NLS_LANG=AMERICAN_AMERICA.ZHS16GBK     ---臨時
#常用unicode字符集
export NLS_LANG=american_america.AL32UTF8
#常用中文字符集
export NLS_LANG=Simplified Chinese_china.ZHS16GBK
可以編輯 bash_profile 文件進行永久設置
vi .bash_profile
export  NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
#使 bash_profile 設置生效
source .bash_profile


三:客戶端字符集環境nls_instance_parameters,其來源於v$parameter,表示客戶端的字符集的設置,可能是參數文件,環境變量或者是註冊表會話字符集環境:
select * from nls_instance_parameters t where t.PARAMETER ='NLS_LANGUAGE' or t.PARAMETER ='NLS_CHARACTERSET';

nls_session_parameters其來源於v$nls_parameters表示會話自己的設置,可能是會話的環境變量或者是alter session完成,

如果會話沒有特殊的設置,將與nls_instance_parameters一致:
select * from nls_session_parameters t where t.PARAMETER ='NLS_LANGUAGE' or t.PARAMETER ='NLS_CHARACTERSET';

windows客戶端:
在Windows上查看當前系統的代碼頁可以使用chcp命令:
E:\>chcp
活動的代碼頁: 936
代碼頁936也就是中文字符集 GBK,在Microsoft的官方站點上,我們可以遭到關於936代碼頁的具體編碼規則,請參考以下鏈接:
http://www.microsoft.com/globaldev/reference/dbcs/936.htm
查看:
echo %NLS_LANG%
客戶端NLS_LANG的設置方法:
#常用中文字符集
set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
#常用unicode字符集
set NLS_LANG=american_america.AL32UTF8
可以通過修改註冊表鍵值永久設置
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\NLS_LANG

或者 計算機---屬性---高級設置---環境變量
添加:NLS_LANG          SIMPLIFIED CHINESE_CHINA.ZHS16GBK


查看數據庫可以用字符集:
SELECT * FROM v$nls_valid_values t where t.PARAMETER ='LANGUAGE' or t.PARAMETER ='CHARACTERSET';

 
客戶端的字符集要求與服務器一致,才能正確顯示數據庫的非ascii字符。如果多個設置存在的時候,alter session>環境變量>註冊表>參數文件字符集要求一致,
但是語言設置卻可以不同,語言設置建議用英文。如字符集是zhs16gbk,則nls_lang可以是american_america.zhs16gbk。


注意exp,imp導入導出字符集要一致。


四:簡單亂碼問題解決:

1.如果出現PLsqldevelop select出來的數據是亂碼:
計算機---屬性---高級設置---環境變量
添加:NLS_LANG          SIMPLIFIED CHINESE_CHINA.ZHS16GBK


2.如果excel打開csv 出現亂碼:
用記事本打開CSV文件
文件-另存爲,編碼方式選擇ANSI
保存完畢後,再用EXCEL打開這個文件就不會出現亂碼的情況。
http://jingyan.baidu.com/article/ac6a9a5e4c681b2b653eacf1.html?qq-pf-to=pcqq.group


3.如果用CRT遠程連接數據庫服務器
在sql>select.....  as   中文    不可以執行sql
則修改CRT的字符集爲:ANSI/OEM-簡體中文或者GB2312

然後設置:export  NLS_LANG=AMERICAN_AMERICA.ZHS16GBK         就可以別名中文了


---end---





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章