ORACLE 修改數據庫的字符集編碼為UTF-8


 轉自:http://blog.sina.com.cn/s/blog_538439270100rkx2.html

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 DATABASENATIONAL 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的區域設置就沒有問題 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM