ORACLE 修改資料庫的字符集編碼為UTF-8

taogchan發表於2013-10-30

1、檢視資料庫字符集?

資料庫伺服器字符集:select * from nls_database_parameters,其來源於props$,是表示資料庫的字符集。

客戶端字符集環境:select * from nls_instance_parameters,其來源於v$parameter,表示客戶端的字符集的設定,可能是引數檔案,環境變數或者是登錄檔會話字符集環境 select * from nls_session_parameters,其來源於v$nls_parameters,表示會話自己的設定,可能是會話的環境變數或者是alter session完成,如果會話沒有特殊的設定,將與nls_instance_parameters一致。

客戶端的字符集要求與伺服器一致,才能正確顯示資料庫的非Ascii字元。如果多個設定存在的時候,alter session>環境變數>登錄檔>引數檔案字符集要求一致,但是語言設定卻可以不同,語言設定建議用英文。如字符集是zhs16gbk,則nls_lang可以是American_America.zhs16gbk。(紅色字型一定要改

2、修改Oracle的字符集,如下例把字符集GB2312修改為UTF-8

步驟:

1.在SQL*PLUS 中,以DBA登入

conn 使用者名稱 as sysdba

2.執行轉換語句:

SHUTDOWN IMMEDIATE;

STARTUP MOUNT EXCLUSIVE;

ALTER SYSTEM ENABLE RESTRICTED SESSION;

ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

ALTER SYSTEM SET AQ_TM_PROCESSES=0;

ALTER DATABASE OPEN;

ALTER DATABASE NATIONAL CHARACTER SET UTF8;

SHUTDOWN IMMEDIATE;

STARTUP;

注意:如果沒有大物件,在使用過程中進行語言轉換沒有什麼影響,(切記設定的字符集必須是ORACLE支援,不然不能start)

按上面的做法就可以,但是可能會出現

ORA-12717: Cannot ALTER DATABASE NATIONAL CHARACTER SET when NCLOB data exists

ORA-12717: 存在 NCLOB, NCHAR 或 NVARCHAR2 資料時, 不能發出 ALTER DATABASE NATIONAL CHARACTER SET 命令

這樣的提示資訊

要解決這個問題有兩種方法

一個是,利用INTERNAL_USE 關鍵字修改區域設定,還有一個是利用re-create,但是re-create有點複雜,所以請用internal_use,

SHUTDOWN IMMEDIATE;

STARTUP MOUNT EXCLUSIVE;

ALTER SYSTEM ENABLE RESTRICTED SESSION;

ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

ALTER SYSTEM SET AQ_TM_PROCESSES=0;

ALTER DATABASE OPEN;

ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;

SHUTDOWN IMMEDIATE;

STARTUP;

如果按上面的做法做,National charset的區域設定就沒有問題 。

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

相關文章