設置oracle服務器的字符集爲utf8 ,轉載

設置oracle服務器的字符集爲utf8 ,轉載

分享
2009-09-15 16:19

查看數據庫字符集 ?
數據庫服務器字符集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’ 這樣的提示信息

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

一個是,利用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的區域設置就沒有問題 。

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