oracle數(shù)據(jù)庫(kù)的字符集更改
創(chuàng)新互聯(lián)網(wǎng)絡(luò)公司擁有十余年的成都網(wǎng)站開發(fā)建設(shè)經(jīng)驗(yàn),數(shù)千家客戶的共同信賴。提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站開發(fā)、網(wǎng)站定制、買友情鏈接、建網(wǎng)站、網(wǎng)站搭建、響應(yīng)式網(wǎng)站開發(fā)、網(wǎng)頁(yè)設(shè)計(jì)師打造企業(yè)風(fēng)格,提供周到的售前咨詢和貼心的售后服務(wù)
A、oracle server 端 字符集查詢
select userenv('language') from dual
其中NLS_CHARACTERSET 為server端字符集
NLS_LANGUAGE 為 server端字符顯示形式
B、查詢oracle client端的字符集
$echo $NLS_LANG
如果發(fā)現(xiàn)你select 出來的數(shù)據(jù)是亂碼,請(qǐng)把client端的字符集配置成與linux操作系統(tǒng)相同的字符集。如果還是有亂碼,則有可能是數(shù)據(jù)庫(kù)中的數(shù)據(jù)存在問題,或者是oracle服務(wù)端的配置存在問題。
C、server端字符集修改
*****************************************************************
* 更改字符集步驟方法(WE8ISO8859P1 -- ZHS16GBK) *
*****************************************************************
SQL
將數(shù)據(jù)庫(kù)啟動(dòng)到RESTRICTED模式下做字符集更改:
SQL conn /as sysdba
Connected.
SQL shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL startup mount
ORACLE instance started.
Total System Global Area 236000356 bytes
Fixed Size 451684 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
SQL ALTER SYSTEM ENABLE RESTRICTED SESSION;
System altered.
SQL ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
System altered.
SQL ALTER SYSTEM SET AQ_TM_PROCESSES=0;
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
提示我們的字符集:新字符集必須為舊字符集的超集,這時(shí)我們可以跳過超集的檢查做更改:
SQL ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
Database altered.
SQL select * from v$nls_parameters;
略
19 rows selected.
重啟檢查是否更改完成:
SQL shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL startup
ORACLE instance started.
Total System Global Area 236000356 bytes
Fixed Size 451684 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
SQL select * from v$nls_parameters;
略
19 rows selected.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
D、client端字符集修改
在 /home/oracle與 /root用戶目錄下的.bash_profile中
添加或修改 export NLS_LANG="AMERICAN_AMERICA.UTF8" 語(yǔ)句
關(guān)閉當(dāng)前ssh窗口。
數(shù)據(jù)庫(kù)字符集在創(chuàng)建后原則上不能更改。不過有2種方法可行。
1. 如果需要修改字符集,通常需要導(dǎo)出數(shù)據(jù)庫(kù)數(shù)據(jù),重建數(shù)據(jù)庫(kù),再導(dǎo)入數(shù)據(jù)庫(kù)數(shù)據(jù)的方式來轉(zhuǎn)換。
2. 通過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.修改服務(wù)器端oracle默認(rèn)字符集:打開“開始菜單”,在“運(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)字符集:打開“開始菜單”,
在“運(yùn)行”里輸入“regedit”,回車,進(jìn)入注冊(cè)表編輯器。按CTRL+F,輸入“NLS_LANG”,回車,找到sqlplus軟件目錄下的
NLS_LANG,其鍵值為“WE8ISO8859P1”。雙擊“NLS_LANG”,輸入“ZHS16GBK”,點(diǎn)擊“確定”按鈕保存重啟計(jì)算
機(jī)。
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 用戶的一套表和過程。以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)換的,并且沒有出現(xiàn)轉(zhuǎn)換“Exceptional”的情況,因此可以更放心一點(diǎn)。
3. 更改數(shù)據(jù)庫(kù)的字符集為ZHS16GBK
前面說過,通過命令“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 出來的數(shù)據(jù)是亂碼,請(qǐng)把client端的字符集配置成與linux操作系統(tǒng)相同的字符集。如果還是有亂碼,則有可能是數(shù)據(jù)庫(kù)中的數(shù)據(jù)存在問題,或者是oracle服務(wù)端的配置存在問題。
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 出來的數(shù)據(jù)是亂碼,請(qǐng)把client端的字符集配置成與linux操作系統(tǒng)相同的字符集。如果還是有亂碼,則有可能是數(shù)據(jù)庫(kù)中的數(shù)據(jù)存在問題,或者是oracle服務(wù)端的配置存在問題。
.?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ù)表里的中文字無法顯示,顯示為“?”,用SQLPLUS查得服務(wù)器端的字符集為AL16uTF16,如何修改該字符集使之支持中文呢?另外oracle10G客戶端的字符集需不需要設(shè)置,如何查看和設(shè)置呢?
你好: -查看oracle數(shù)據(jù)庫(kù)字符集: select userenv('language') from dual; 查詢結(jié)果: SIMPLIFIED CHINESE_CHINA.AL32UTF8 --修改oracle數(shù)據(jù)庫(kù)字符集:(在SQL Plus中) conn sys/oracle as sysdba ALTER SYSTEM DISABLE RESTRICTED SESSION;改完編碼后執(zhí)行 sql conn / as sysdba; sql shutdown immediate; database closed. database dismounted. oracle instance shut down. sql startup mount; oracle instance started. total system global area 135337420 bytes fixed size 452044 bytes variable size 109051904 bytes database buffers 25165824 bytes redo buffers 667648 bytes database mounted. sql alter system enable restricted session; system altered. sql alter system set job_queue_processes=0; system altered. sql alter system set aq_tm_processes=0; system altered. sql alter database open; database altered. sql alter database character set internal_use JA16SJIS; sql shutdown immediate; sql startup;