如何更改Oracle字符集 國內(nèi)最常用的Oracle字符集ZHS16GBK(GBK 16-bit Simplified Chinese)能夠支持繁體中文,并且按照2個字符長度存儲一個漢字。UTF8字符集是多字節(jié)存儲,1個漢字(簡體、繁體)有時采用3個字符長度存儲。 Oracle支持字符集的...

創(chuàng)新互聯(lián)公司是專業(yè)的曲水網(wǎng)站建設(shè)公司,曲水接單;提供成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行曲水網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
[a]數(shù)據(jù)庫服務(wù)器字符集select * from nls_database_parameters,其來源于props$,是表示數(shù)據(jù)庫的字符集。
客戶端字符集環(huán)境select * from nls_instance_parameters,其來源于v$parameter,
表示客戶端的字符集的設(shè)置,可能是參數(shù)文件,環(huán)境變量或者是注冊表
會話字符集環(huán)境 select * from nls_session_parameters,其來源于v$nls_parameters,表示會話自己的設(shè)置,可能是會話的環(huán)境變量或者是alter session完成,如果會話沒有特殊的設(shè)置,將與nls_instance_parameters一致。
客戶端的字符集要求與服務(wù)器一致,才能正確顯示數(shù)據(jù)庫的非ascii字符。如果多個設(shè)置存在的時候,alter session環(huán)境變量注冊表參數(shù)文件
字符集要求一致,但是語言設(shè)置卻可以不同,語言設(shè)置建議用英文。如字符集是zhs16gbk,則nls_lang可以是american_america.zhs16gbk。
[a]8i以上版本可以通過alter database來修改字符集,但也只限于子集到超集,不建議修改props$表,將可能導(dǎo)致嚴(yán)重錯誤。
startup nomount;
alter database mount exclusive;
alter system enable restricted session;
alter system set job_queue_process=0;
復(fù)制一段吧:
通常情況下,字符集是在安裝的時候選定好的,需要修改數(shù)據(jù)庫的字符集Oracle建議的做法是重建數(shù)據(jù)庫(EXP/EXPDP導(dǎo)出后再導(dǎo)入),雖然Oracle官方文檔也有說如何修改字符集,但這不是Orale推薦的方法.下面是Oracle官方文檔中提到的如何修改字符集的方法.
1.查看當(dāng)前數(shù)據(jù)庫字符集
select * from nls_database_parameters
where parameter='NLS_CHARACTERSET';
-----------------------------------
PARAMETER VALUE
NLS_CHARACTERSET WE8ISO8859P1
這里的字符集WE8ISO8859P1是不支持中文的
2.將字符集修改為中文字符集ZHS16GBK
SQL shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL STARTUP MOUNT;
ORACLE instance started.
Total System Global Area 734003200 bytes
Fixed Size 1221564 bytes
Variable Size 264244292 bytes
Database Buffers 465567744 bytes
Redo Buffers 2969600 bytes
Database mounted.
SQL ALTER SYSTEM ENABLE RESTRICTED SESSION;
System altered.
SQL ALTER DATABASE OPEN;
Database altered.
SQL ALTER DATABASE CHARACTER SET ZHS16GBK;
ALTER DATABASE CHARACTER SET ZHS16GBK
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
SQL ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
Database altered.
SQL SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL startup
ORACLE instance started.
Total System Global Area 734003200 bytes
Fixed Size 1221564 bytes
Variable Size 264244292 bytes
Database Buffers 465567744 bytes
Redo Buffers 2969600 bytes
Database mounted.
Database opened.
這樣將數(shù)據(jù)庫的字符集由原來的WE8ISO8859P1修改成了ZHS16GBK,對原來的字符集有中文的顯示的還是亂碼,但對新入庫的中文字符集就能正常顯示.
數(shù)據(jù)庫字符集在創(chuàng)建后原則上不能更改。不過有2種方法可行。
1. 如果需要修改字符集,通常需要導(dǎo)出數(shù)據(jù)庫數(shù)據(jù),重建數(shù)據(jù)庫,再導(dǎo)入數(shù)據(jù)庫數(shù)據(jù)的方式來轉(zhuǎn)換。
2. 通過ALTER DATABASE CHARACTER SET語句修改字符集,但創(chuàng)建數(shù)據(jù)庫后修改字符集是有限制的,只有新的字符集是當(dāng)前字符集的超集時才能修改數(shù)據(jù)庫字符集,例如UTF8是US7ASCII的超集,修改數(shù)據(jù)庫字符集可使用ALTER DATABASE CHARACTER SET UTF8。
1.修改服務(wù)器端oracle默認(rèn)字符集:打開“開始菜單”,在“運行”里輸入“cmd”,回車,進(jìn)入命令行編
輯模式。輸入“sqlplus /nolog”,回車。修改默認(rèn)字符集,以sysdba的身份執(zhí)行SQL語句。輸入“conn
sys/password@orcl as sysdba;”,回車。輸入“select name,value$ from props$ where
name like
’%NLS%’;”,查看默認(rèn)字符集。找到“NLS_CHARACTERSET”,其值為“WE8ISO8859P1”。
2.修改客戶端sqlplus默認(rèn)字符集:打開“開始菜單”,
在“運行”里輸入“regedit”,回車,進(jìn)入注冊表編輯器。按CTRL+F,輸入“NLS_LANG”,回車,找到sqlplus軟件目錄下的
NLS_LANG,其鍵值為“WE8ISO8859P1”。雙擊“NLS_LANG”,輸入“ZHS16GBK”,點擊“確定”按鈕保存重啟計算
機。
1. 備份數(shù)據(jù)庫中所有用戶的數(shù)據(jù)
以oracle用戶登陸,執(zhí)行以下命令
# export NLS_LANG = “SIMPLIFIED CHINESE_CHINA.UTF8”
保持與數(shù)據(jù)庫服務(wù)器端一致,這樣在exp導(dǎo)出時,就不會存在字符的轉(zhuǎn)換了,備份最原始的數(shù)據(jù)。
2. 評估UTF8轉(zhuǎn)換成ZHS16GBK的風(fēng)險
轉(zhuǎn)換之前,要使用Oracle的csscan工具對數(shù)據(jù)庫掃描,評估字符集轉(zhuǎn)換前后,數(shù)據(jù)有可能的損壞情況。如果評估情況糟糕,那就絕對要放棄了。
先安裝屬于 CSMIG 用戶的一套表和過程。以oracle用戶登陸UNIX,
#sqlplus “/ as sysdab”
SQL@$ORACLE_HOME/ rdbms/admin/csminst.sql
SQLexit
# $ORACLE_HOME\bin\csscan -help
可以更清楚如何使用csscan。
# $ORACLE_HOME/bin/csscan system/sunday user=mmsc FROMCHAR=UTF8 TOCHAR=ZHS16GBK ARRAY=102400 PROCESS=3 csscan.log
以上命令意思是掃描用戶:mmsc中的所有數(shù)據(jù),從字符集UTF8更改為ZHS16GBK的轉(zhuǎn)換情況。然后得到三個文件:scan.txt、scan.out、scan.err。
查看scan.out,scan.err,可以看出mmsc用戶下的所有的數(shù)據(jù)都是可以轉(zhuǎn)換的,并且沒有出現(xiàn)轉(zhuǎn)換“Exceptional”的情況,因此可以更放心一點。
3. 更改數(shù)據(jù)庫的字符集為ZHS16GBK
前面說過,通過命令“Alter Database Characeter Set XXXX”,實現(xiàn)從超集到子集的轉(zhuǎn)換,在Oracle是不允許的。但是該命令,提供這樣的命令方式:
Alter Database Character Set INTERNAL_CONVERT/ INTERNAL_USE XXXX
文章題目:oracle怎么設(shè)置字符集,oracle數(shù)據(jù)庫字符集設(shè)置
本文URL:http://chinadenli.net/article15/dsisggi.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、定制網(wǎng)站、定制開發(fā)、建站公司、軟件開發(fā)、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)