1,如果安裝完Oracle 9i,National Charset裡的Default Value,就是AL16UTF16.
如果打算把AL16UTF16換成UTF8
按照以前的方法
update sys.props$
set value$ = 'UTF8' where name = ''NLS_NCHAR_CHARACTERSET''; 就會出現上面的問題
在Oracle 裡面沒有完全反映Charset的資訊
所以,在 Table裡 Insert時, Value設定成AL16UTF16了,只有Default Space才設定成UTF8了..
2,所以應該這樣換
$ sqlplus ‘/ as sysdba’
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT EXCLUSIVE;
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 NATIONAL CHARACTER SET UTF8;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
按上面的做法就可以,但是可能會出現‘ORA-12717: Cannot ALTER DATABASE NATIONAL CHARACTER SET when
NCLOB data exists’ 這樣的提示資訊
要解決這個問題有兩種方法
一個是,利用INTERNAL_USE 關鍵字修改地區設定,還有一個是利用re-create,但是re-create有點複雜,所以請用internal_use,
$ sqlplus ‘/ as sysdba’
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT EXCLUSIVE;
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 NATIONAL CHARACTER SET INTERNAL_USE UTF8;
SQL> SHUTDOWN IMMED
如果按上面的做法做,National charset的地區設定就沒有問題