ORACLE字符集簡介

lixianghao發表於2009-12-25

ORACLE字符集設定,分為資料庫字符集客戶端字符集環境設定。
在資料庫端,字符集在建立資料庫的時候設定,並儲存在資料庫props$表中。
對於8i以上產品,已經可以採用“Alter database character set 字符集”來修改資料庫的字符集,但也僅僅是從子集到超集.
注意:
不要透過update props$來修改字符集,如果是不支援的轉換,可能會失去所有與字符集有關的資料,就是支援的轉換,也可能導致資料庫的不正常工作。

在客戶端的字符集環境比較簡單,主要就是環境變數或登錄檔項NLS_LANG。
注意:
NLS_LANG的優先順序別為:引數檔案、登錄檔、環境變數、alter session。
NLS_LANG的組成為“國家語言設定.字符集”,如nls_lang=simplified chinese_china.zhs16gbk。
建議:
客戶端的字符集最好與資料庫端一樣(國家語言設定可以不一樣,如zhs16gbk的字符集,客戶端可以是nls_lang =simplified
chinese_china.zhs16gbk或Ameircan_America.zhs16gbk,都不影響資料庫字元的正常顯示),
如果字符集不一樣,而且字符集的轉換也不相容,那麼客戶端的資料顯示與匯出/匯入的與字符集有關的資料將都是亂碼。

資料庫端字符集的檢查方法
以sys使用者登陸資料庫,檢查props$表,使用語句如下:
SELECT * FROM PROPS$ WHERE NAME='NLS_CHARACTERSET';

示例:
SQL> COLUMN NAME FORMAT A20
SQL> COLUMN VALUE$ FORMAT A20
SQL> COLUMN COMMENT$ FORMAT A20
SQL> SELECT * FROM PROPS$ WHERE NAME='NLS_CHARACTERSET';

NAME VALUE$ COMMENT$
-------------------- -------------------- --------------------
NLS_CHARACTERSET AL32UTF8 Character set


字符集修改方法
如果資料庫字符集不是AL32UTF8,需要修改,否則影響很多應用程式的正常使用。
修改方法如下:
一、使用Alter database character set修改資料庫字符集
這個語句僅僅用於ORACLE8i以上版本,並且是子集到超集的修改。
如utf8修改到al32utf8.
示例:Alter database character set AL32UTF8;

具體步驟如下:
1、關閉資料庫。
可以使用shutdown immediate語句。

2、資料庫全備份。
由於the ALTER DATABASE CHARACTER SET 語句不可以回滾,如果出錯,資料庫就廢掉了。

3、修改字符集
以sys使用者登陸資料庫,在sqlplus中執行下列語句:
STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE CHARACTER SET new_character_set;
SHUTDOWN IMMEDIATE;
STARTUP;
alter system SET JOB_QUEUE_PROCESSES=10;
ALTER SYSTEM SET AQ_TM_PROCESSES=1;


二、重新建庫
如果不能使用語句修改字符集,則只有重新建立資料庫了。

使用exp匯出所有的已經建立的使用者,再重新建立一個資料庫,其字符集需要定義為AL32UTF8。
使用imp匯入各個使用者。

[@more@]

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

相關文章