修改Oracle字符集(character set)
本方法適用于Oracle9i, 10g以及XE. 在10.2.0.1.0下測試無錯. 需要注意的是, 使用此方法會破壞數(shù)據(jù)庫中的原有雙字節(jié)字符. 一種辦法是先將數(shù)據(jù)庫導(dǎo)出, 修改完字符集后再導(dǎo)入; 另一種辦法就是不管他, 就那樣使用. 一般如果是一個測試環(huán)境, 像方法二那樣就可以了, 但是可能某些表無法讀取, 需要注意.
?
sql> shutdown immediate
sql> startup mount
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 character set <internal_use> AL32UTF8;
sql> shutdown immediate
sql> startup
?
這里的INTERNAL_USE可選,譬如用于不能從父集轉(zhuǎn)到子集的場合,但是這樣做會產(chǎn)生亂碼,或者表中的數(shù)據(jù)不能讀取。
?
如果數(shù)據(jù)庫中存在CLOB字段,那么就不允許對字符集進(jìn)行轉(zhuǎn)換,此時可以查看alert<sid>.log文件,把含有CLOB的表trancate.
?
sql> trancate table [table_name];
?
轉(zhuǎn)換后的數(shù)據(jù)庫字符集可以通過以下命令察看.
?
sql> select name, value$ from props$ where name like '%NLS%';
?
導(dǎo)入導(dǎo)出是我們常用的一個數(shù)據(jù)遷移及轉(zhuǎn)化工具,因其導(dǎo)出文件具有平臺無關(guān)性,所以在跨平臺遷移中,最為常用。
在導(dǎo)出操作時,非常重要的是客戶端的字符集設(shè)置,也就是客戶端的NLS_LANG設(shè)置。
?
NLS_LANG參數(shù)由以下部分組成:
?
NLS_LANG=<Language>_<Territory>.<Clients Characterset>
?
NLS_LANG各部分含義如下:
??? Language
??????? -Oracle消息使用的語言?
??????? -日期中月份和日顯示
??????? -Oracle消息使用的語言?
??????? -日期中月份和日顯示
??? Territory?
??????? -貨幣和數(shù)字格式?
??????? -地區(qū)和計算星期及日期的習(xí)慣
??????? -貨幣和數(shù)字格式?
??????? -地區(qū)和計算星期及日期的習(xí)慣
??? Clients Characterset?
??????? -控制客戶端應(yīng)用程序使用的字符集
??????? -控制客戶端應(yīng)用程序使用的字符集
?
例如
?
E:\>set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
E:\>sqlplus "/ as sysdba"
E:\>sqlplus "/ as sysdba"
?
或者
?
E:\>set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
E:\>sqlplus "/ as sysdba"
E:\>sqlplus "/ as sysdba"
?
Windows客戶端設(shè)置,可以在注冊表中更改NLS_LANG,具體鍵值位于:
?
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\
?
xx指存在多個ORACLE_HOME時系統(tǒng)編號。