數(shù)據(jù)庫(kù)字符集在創(chuàng)建后原則上不能更改。不過(guò)有2種方法可行。
成都創(chuàng)新互聯(lián)公司是專業(yè)的樂(lè)陵網(wǎng)站建設(shè)公司,樂(lè)陵接單;提供網(wǎng)站制作、成都網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行樂(lè)陵網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
1. 如果需要修改字符集,通常需要導(dǎo)出數(shù)據(jù)庫(kù)數(shù)據(jù),重建數(shù)據(jù)庫(kù),再導(dǎo)入數(shù)據(jù)庫(kù)數(shù)據(jù)的方式來(lái)轉(zhuǎn)換。
2. 通過(guò)ALTER DATABASE CHARACTER SET語(yǔ)句修改字符集,但創(chuàng)建數(shù)據(jù)庫(kù)后修改字符集是有限制的,只有新的字符集是當(dāng)前字符集的超集時(shí)才能修改數(shù)據(jù)庫(kù)字符集,例如UTF8是US7ASCII的超集,修改數(shù)據(jù)庫(kù)字符集可使用ALTER DATABASE CHARACTER SET UTF8。
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.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)換情況。然后得到三個(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
A、oracle server 端字符集查詢
select userenv('language') from dual
其中NLS_CHARACTERSET 為server端字符集
NLS_LANGUAGE 為 server端字符顯示形式
B、查詢oracle client端的字符集
$echo $NLS_LANG
如果發(fā)現(xiàn)你select 出來(lái)的數(shù)據(jù)是亂碼,請(qǐng)把client端的字符集配置成與linux操作系統(tǒng)相同的字符集。如果還是有亂碼,則有可能是數(shù)據(jù)庫(kù)中的數(shù)據(jù)存在問(wèn)題,或者是oracle服務(wù)端的配置存在問(wèn)題。
C、server端字符集修改
將數(shù)據(jù)庫(kù)啟動(dòng)到RESTRICTED模式下做字符集更改:
SQL conn /as sysdba ?Connected.
SQL shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
如果發(fā)現(xiàn)你select 出來(lái)的數(shù)據(jù)是亂碼,請(qǐng)把client端的字符集配置成與linux操作系統(tǒng)相同的字符集。如果還是有亂碼,則有可能是數(shù)據(jù)庫(kù)中的數(shù)據(jù)存在問(wèn)題,或者是oracle服務(wù)端的配置存在問(wèn)題。
.?1.oracle server端字符集查詢? ? ? ? 復(fù)制代碼代碼如下:? ? select userenv('language') from dual;? ? server字符集修改:? ? 將數(shù)據(jù)庫(kù)啟動(dòng)到RESTRICTED模式下做字符集更改:??
oracle10g服務(wù)器端是安裝在AIX 6.0系統(tǒng)上,客戶端是安裝在windows server 2008 系統(tǒng)上,客戶端與服務(wù)器已成功連接,但是數(shù)據(jù)庫(kù)表里的中文字無(wú)法顯示,顯示為“?”,用SQLPLUS查得服務(wù)器端的字符集為AL16uTF16,如何修改該字符集使之支持中文呢?另外oracle10G客戶端的字符集需不需要設(shè)置,如何查看和設(shè)置呢?
通過(guò)注冊(cè)表修改 \x0d\x0a HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0 \x0d\x0a NLS_LANG 改為你需要的字符集. \x0d\x0a\x0d\x0a常用字符集(暫時(shí)只收集到兩個(gè)) \x0d\x0a AMERICAN_AMERICA.WE8ISO8859P1 \x0d\x0a SIMPLIFIED CHINESE_CHINA.ZHS16GBK \x0d\x0a american_america.AL32UTF8\x0d\x0a\x0d\x0a 1--------- AMERICAN_AMERICA.zhs16gbk \x0d\x0a 2--------- AMERICAN_AMERICA.utf8
1、改客戶端字符集:通過(guò)WINDOWS的運(yùn)行菜單運(yùn)行Regedit,修改注冊(cè)表
Start - Run - Rededit -|
Under registry Editor - HKEY_LOCAL_MACHINE - SOFTWARE -ORACLE-KEY_XE-RIGHT WINDOW DOUBLE CLICK NLS_LANG - CHANGE VALUE TO "AMERICAN_AMERICA.UTF8" -OK -CLOSE REGISTRY
正確設(shè)置ORACLE客戶端字符集的方法:
oracle客戶端字符集設(shè)置需要和服務(wù)器端一致,否則會(huì)出現(xiàn)亂碼問(wèn)題。
首先連接服務(wù)器,查詢服務(wù)器端設(shè)置:
select * from v$nls_parameters;
找到:
NLS_LANGUAGE
NLS_TERRITORY
NLS_CHARACTERSET
環(huán)境變量nls_lang便是由這三部分組成
NLS_LANG = language_territory.charset
比如:
NLS_LANG = American_Japan.JA16SJIS
2、改服務(wù)器端字符集,通過(guò)ORACLE的SQL PLUS命令窗口改
在SQL*PLUS 中,以DBA登錄
conn 用戶名 as sysdba
然后執(zhí)行以下命令
shutdown immediate; (把database停了)
startup mount; (把database重開(kāi)去可更改情況)
alter system enable restricted session;
alter system set job_queue_processes=0;
alter system set aq_tm_processes=0;
alter database open;
alter database character set utf8;
OR
alter database character set internal_use utf8;
shutdown immediate;
startup; (重開(kāi)正常oracle)
ORACLE數(shù)據(jù)庫(kù)字符集修改完成!
1.修改服務(wù)器端oracle默認(rèn)字符集:打開(kāi)“開(kāi)始菜單”,在“運(yùn)行”里輸入“cmd”,回車,進(jìn)入命令行編
輯模式。輸入“sqlplus /nolog”,回車。修改默認(rèn)字符集,以sysdba的身份執(zhí)行SQL語(yǔ)句。輸入“conn
sys/password@orcl as sysdba;”,回車。輸入“select name,value$ from props$ where
name like
’%NLS%’;”,查看默認(rèn)字符集。找到“NLS_CHARACTERSET”,其值為“WE8ISO8859P1”。
2.修改客戶端sqlplus默認(rèn)字符集:打開(kāi)“開(kāi)始菜單”,
在“運(yùn)行”里輸入“regedit”,回車,進(jìn)入注冊(cè)表編輯器。按CTRL+F,輸入“NLS_LANG”,回車,找到sqlplus軟件目錄下的
NLS_LANG,其鍵值為“WE8ISO8859P1”。雙擊“NLS_LANG”,輸入“ZHS16GBK”,點(diǎn)擊“確定”按鈕保存重啟計(jì)算
機(jī)。