如何更改Oracle字符集國(guó)內(nèi)最常用的Oracle字符集ZHS16GBK(GBK 16-bit Simplified Chinese)能夠支持繁體中文,并且按照2個(gè)字符長(zhǎng)度存儲(chǔ)一個(gè)漢字。UTF8字符集是多字節(jié)存儲(chǔ),1個(gè)漢字(簡(jiǎn)體、繁體)有時(shí)采用3個(gè)字符長(zhǎng)度存儲(chǔ)。Oracle支持字符集的更改,但是UTF8是Oracle中最大的字符集,也就是說(shuō)UTF8是ZHS16GBK的嚴(yán)格超集。對(duì)于子集到超集的轉(zhuǎn)換,Oracle是允許的,但是對(duì)于超集到子集的轉(zhuǎn)換是不允許的。一般對(duì)于超集到子集的轉(zhuǎn)換,建議是通過(guò)dbca刪除原來(lái)的數(shù)據(jù)庫(kù),重新再建庫(kù),選擇正確的字符集,然后導(dǎo)入備份。我的方案是:先備份數(shù)據(jù),然后強(qiáng)制轉(zhuǎn)換字符集從UTF8到ZHS16GBK,然后導(dǎo)入備份數(shù)據(jù)。如果不行,才來(lái)重新建庫(kù),設(shè)置字符集ZHS16GBK,導(dǎo)入備份數(shù)據(jù)。如果這還不行,就把更改字符集從ZHS16GBK到UTF8(這是安全的),再導(dǎo)入備份數(shù)據(jù),恢復(fù)到原始狀況。這樣就有可能避開(kāi)重新建庫(kù)的麻煩。1. 備份數(shù)據(jù)庫(kù)中所有用戶的數(shù)據(jù)以oracle用戶登陸,執(zhí)行以下命令# export NLS_LANG = “SIMPLIFIED CHINESE_CHINA.UTF8”保持與數(shù)據(jù)庫(kù)服務(wù)器端一致,這樣在exp導(dǎo)出時(shí),就不會(huì)存在字符的轉(zhuǎn)換了,備份最原始的數(shù)據(jù)。2. 評(píng)估UTF8轉(zhuǎn)換成ZHS16GBK的風(fēng)險(xiǎn)轉(zhuǎn)換之前,要使用Oracle的csscan工具對(duì)數(shù)據(jù)庫(kù)掃描,評(píng)估字符集轉(zhuǎn)換前后,數(shù)據(jù)有可能的損壞情況。如果評(píng)估情況糟糕,那就絕對(duì)要放棄了。先安裝屬于 CSMIG 用戶的一套表和過(guò)程。以oracle用戶登陸UNIX,#sqlplus “/ as sysdab”SQL@$ORACLE_HOME/ rdbms/admin/csminst.sqlSQLexit# $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)換情況。然后得到三個(gè)文件:scan.txt、scan.out、scan.err。查看scan.out,scan.err,可以看出mmsc用戶下的所有的數(shù)據(jù)都是可以轉(zhuǎn)換的,并且沒(méi)有出現(xiàn)轉(zhuǎn)換“Exceptional”的情況,因此可以更放心一點(diǎn)。3. 更改數(shù)據(jù)庫(kù)的字符集為ZHS16GBK前面說(shuō)過(guò),通過(guò)命令“Alter Database Characeter Set XXXX”,實(shí)現(xiàn)從超集到子集的轉(zhuǎn)換,在Oracle是不允許的。但是該命令,提供這樣的命令方式:Alter Database Character Set INTERNAL_CONVERT/ INTERNAL_USE XXXX這是Oracle的非公開(kāi)命令?!霸谑褂眠@個(gè)命令時(shí),Oracle會(huì)跳過(guò)所有子集及超集的檢查,在任意字符集之間進(jìn)行強(qiáng)制轉(zhuǎn)換,所以,使用這個(gè)命令時(shí)你必須十分小心,你必須清楚這一操作會(huì)帶來(lái)的風(fēng)險(xiǎn)”。以oracle用戶登陸UNIX,#sqlplus “/ as sysdba”SQL SHUTDOWN IMMEDIATE; SQL STARTUP MOUNT; SQL ALTER SESSION SET SQL_TRACE=TRUE;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 ZHS16GBK; //如果不使用“INTERNAL_USE”參數(shù),系統(tǒng)會(huì)提示出錯(cuò)://ERROR at line 1://ORA-12712: new character set must be a superset of old character setSQL ALTER SESSION SET SQL_TRACE=FALSE;SQL SHUTDOWN IMMEDIATE; SQL STARTUP;此時(shí),檢查一下數(shù)據(jù)庫(kù)的字符集是否更改過(guò)來(lái)SQL select value$ from props$ where name=’NLS_CHARACTERSET’;VALUE$-----------------ZHS16GBK緊接著檢查一下數(shù)據(jù)庫(kù)中簡(jiǎn)體中文、繁體中文是否正常,不會(huì)出現(xiàn)亂碼。SQLselect spid,spname,spshortname from spinfovisual_hk …...非常不幸,我看到了一堆亂碼,這也證明了Oracle不支持字符集從超集到子集的更改,當(dāng)時(shí)心里很緊張,很怕失敗,從而恢復(fù)到原樣。但是根據(jù)以前的驗(yàn)證,把UTF8下的備份導(dǎo)入到ZHS16GBK中去,是OK的,所以繼續(xù)嘗試。4. 導(dǎo)入備份的用戶數(shù)據(jù)還是以oracle用戶登陸UNIX, 先刪除庫(kù)中的用戶mmsc:#sqlplus “/ as sysdba”SQLdrop user mmsc cascade;SQLexit再運(yùn)行createuser.sql,生成mmsc用戶。然后使用原來(lái)的備份文件,導(dǎo)入到mmsc用戶中:注意:先設(shè)置NLS_LANG要與當(dāng)前數(shù)據(jù)庫(kù)的一致:ZHS16GBK。這樣,導(dǎo)出時(shí)用戶會(huì)話的NLS_LANG為UTF8,與原先的數(shù)據(jù)庫(kù)字符集一致;現(xiàn)在為ZHS16GBK,與此時(shí)的數(shù)據(jù)庫(kù)字符集一致。這樣,導(dǎo)入時(shí),就會(huì)進(jìn)行字符轉(zhuǎn)換。# export NLS_LANG = “SIMPLIFIED CHINESE_CHINA.ZHS16GBK”#imp mmsc/mmsc@mdspdb file=DSMPD113_user_mmsc.dmp ignore=y fromuser=mmsc touser=mmsc馬上查看數(shù)據(jù)庫(kù)中簡(jiǎn)體、繁體中文,哈哈,沒(méi)有亂碼了,一切顯示正常。緊接著進(jìn)行驗(yàn)證,也證明了:1個(gè)漢字此時(shí)只占用2個(gè)字符長(zhǎng)度。問(wèn)題解決了!
10年積累的成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先做網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有鎮(zhèn)康免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
更改當(dāng)前會(huì)話的語(yǔ)言就可以了,執(zhí)行下面這段SQL
--PLSQL中修改當(dāng)前會(huì)話語(yǔ)言環(huán)境
alter session set nls_language='SIMPLIFIED CHINESE' -- 中文
alter session set nls_language='AMERICAN'; -- 英文
以IE為例: Tools - Internet Options - General - Language 點(diǎn)擊 'Add' 按鈕把中文添加的列表里面 點(diǎn)擊 'Move up' 或 'Move down' 按鈕把中文調(diào)整的最上方 WAS管理控制臺(tái)頁(yè)面,將由英文變?yōu)橹形娘@示。
這是因?yàn)镺racle網(wǎng)站采用的是國(guó)際化,當(dāng)你訪問(wèn)官網(wǎng)時(shí),它會(huì)根據(jù)你操作系統(tǒng)默認(rèn)的區(qū)域和語(yǔ)言選擇相應(yīng)的下載項(xiàng),如果你的區(qū)域和語(yǔ)言是中文,它就會(huì)下載中文安裝包,一個(gè)簡(jiǎn)單的辦法是:修改一下默認(rèn)的“區(qū)域和語(yǔ)言”,將它改為英文即可,在控制面板的區(qū)域和語(yǔ)言選項(xiàng)
當(dāng)前文章:oracle怎么改成英文 oracle英文名
網(wǎng)站URL:http://aaarwkj.com/article2/hhhooc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、面包屑導(dǎo)航、虛擬主機(jī)、企業(yè)網(wǎng)站制作、網(wǎng)站改版、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)