Oracle資料庫字符集介紹

流浪的野狼發表於2013-06-28

來自:oracle_kai的個人空間

子集和超集的概念

如果字符集a的所有編碼存在於字符集b中,並且同一個編碼在字符集a編碼和字符集b中代表同樣的字元,則稱ba的超級,ab的子集,如us7asciizhs16cgb231280的子集,值得注意的是,對於中文環境中,zhs16cgb231280zhs16gbk,雖然前者所有的字元都在後者中存在,但同一編碼在這二個字符集中可能代表不同字元,所以,zhs16gbk不是說是zhs16cgb2312280的超集。

 

資料庫字符集和國家字符集

在建立資料庫的sql中有character setnational character set指定.

資料庫字符集用來存放charvarchar2cloblong等型別資料,sqlpl/sql程式單元等

國家字符集用來存放ncharnvarchar2nclobnlong等類新資料.

 

oracle字符集命名規則

<位元位數><字元編碼>

zhs16gbk表示語言為中文,採用雙位元組16位編碼,gbk編碼。

  us7ascill表示語言為英語,採用單位元組7位編碼,ascill編碼。

 

如何取得客戶端作業系統的當前字符集

window作業系統,用chcp,如結果為936,則代表為zhs16gbk,具體可以去微軟網站查詢。

Unix 作業系統,用echo $NLS_LANG      或者env|grep NLS_LANG

 

如何檢視客戶端的字符集設定

客戶端字符集透過nls_lang來設定,nls_lang的格式

_.>

nls_lang=American_America.us7ascii

window作業系統,用echo %NLS_LANG%

Unix 作業系統,用echo $NLS_LANG      或者env|grep NLS_LANG

 

如何檢視資料庫字符集

dba使用者可以查資料字典propsnls_database_parameters

SQL> select name,value$ from props$;

NLS_CHARACTERSET            ZHS16CGB231280

 

select * from nls_database_parameters;

NLS_CHARACTERSET            ZHS16CGB231280

 

普通使用者可以用userenv這個函式去檢視當前資料庫的字符集

SQL> SELECTUSERENV('LANGUAGE')FROM DUAL;

USERENV('LANGUAGE')

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

AMERICAN_AMERICA.ZHS16CGB231280

 

 

Exp/imp匯入匯出涉及的字符集問題

 

1:Exp的時候,設定客戶端的字符集和匯出資料庫的字符集一致,這樣,匯出檔案將和匯出資料庫具有相同的字符集,避免了匯出資料庫與匯出檔案之間的字符集轉換

 

2:匯入的時候,設定客戶端的字符集為匯出檔案的字符集,這樣避免了匯出檔案與匯入客戶端字符集的轉換,如果此時匯入客戶端字符集不等於資料庫字符集,那麼在資料庫會負責匯入客戶端字符集到資料庫字符集的轉換。

 

3:匯出的時候,匯出客戶端的字符集存放在匯出檔案的第二,三個位元組(16進位制),下面的二個函式可以幫助我們識別字符集編碼和數值之間的關係。

  SQL> select nls_charset_name(852) from dual;

 

NLS_CHARSET_NAME

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

ZHS16GBK

SQL> select nls_charset_ID('ZHS16CGB231280') FROM DUAL;

 

NLS_CHARSET_ID('ZHS16CGB231280')

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

850

 

 

關於字符集的修改

一:alter database character set zhs16cgb231280

可以用在子集到超級的修改

二:alter database character set internal_use zhs16cgb231280

該語句不受子集和超集的限制,強制性轉換

(修改前,切記要備份

 

SQL> shutdown immediate

資料庫已經關閉。

已經解除安裝資料庫。

ORACLE例程已經關閉。

SQL> startup mount

ORACLE例程已經啟動。

Total System Global Area 135338868 bytes

Fixed Size                  453492 bytes

Variable Size            109051904 bytes

Database Buffers          25165824 bytes

Redo Buffers                667648 bytes

資料庫裝載完畢。

SQL>alter system enable restricted session;

系統已更改。

SQL>alter system set job_queue_processes=0;

系統已更改。

SQL>alter system set aq_tm_processes=0;

系統已更改。

SQL> alter database open;

資料庫已更改。

SQL>alter database character set internal_use zhs16cgb231280;

資料庫已更改。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28612416/viewspace-765077/,如需轉載,請註明出處,否則將追究法律責任。

相關文章