一般來說,oracle數(shù)據(jù)導出spool方式,中文出現(xiàn)亂碼,這情況是因為數(shù)據(jù)庫服務(wù)器和客戶端字符集不匹配,執(zhí)行sqlplus的機器就是客戶端,服務(wù)器和客戶端也可能是一臺機器,執(zhí)行sqlplus之前要先設(shè)置客戶端的字符集,在linux上:export NLS_LANG=.......
成都創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)澤普,十多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
在windows上set NLS_LANG查詢數(shù)據(jù)庫字符集:select property_value from database_properties where property_name like 'NLS_CHAR%';
1、比如查詢結(jié)果是:ZHS16GBK
那你在sqlplus之前要設(shè)置:export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
然后再登錄sqlplus用spool生成數(shù)據(jù)
檢查下你導出時候的環(huán)境變量,導入時的環(huán)境變量
2、比如導出時NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
導入時NLS_LANG沒有設(shè)置,或者設(shè)置為其他字符集,則導入的庫內(nèi)漢字就有可能變成亂碼。
解決方法,連接數(shù)據(jù)庫的時候設(shè)置正確字符集即可。
1、對于Oracle Enterprise Manager中的所有工具,有一個配置文件名為dbappscfg.properties,修改該文件即可解決上述問題。這個文件的位置在$ORACLE_HOME\sysman\config目錄下,用任何的文本編輯器打開該文件,在這個文件里面,找到這樣一項,
# SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
2、去掉注釋符#,同時將其修改為
SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
3、對于Windows操作系統(tǒng),還需要修改一項,在文件中找到# SQLPLUS_SYSTEMROOT=c:\\WINNT40,去掉注釋符,將其修改為你所在機器的操作系統(tǒng)主目錄。如操作系統(tǒng)的主目錄在D盤的Winnt下,則將其修改為
SQLPLUS_SYSTEMROOT=d:\\WINNT。
對于后面一項的修改只對Windows操作系統(tǒng)進行,對UNIX操作系統(tǒng)則不需要。如果在Windows操作系統(tǒng)中不修改該項,在Oracle Enterprise Manager中,連接系統(tǒng)時,會提示如下的錯誤:
ORA-12560 TNS:protocol adapter error
或者
ORA-12545 Connect failed because target host or object does not exist
4、修改完成后,保存文件,退出編輯。重新連接SQL PLUS Worksheet,字符集亂碼問題得到解決,顯示正確的簡體中文字符集。
問題: 使用Oracle Instant Client 出現(xiàn) ORA-12705: Cannot access NLS data files or invalid environment specified 錯誤。
如果是Windows平臺,注冊表里 \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 查找鍵 NLS_LANG,這個鍵由Oracle標準客戶端安裝創(chuàng)建, 值是 NA 。這個導致了 ORA-12705錯誤。解決方法就是改名 NLS_LANG。
Linux下 如果環(huán)境變量 NLS_LANG 值是NA 會引起 ORA-12705 錯誤,解決方法是刪除這個變量
unset NLS_LANG
可能是字符集不一致造成的,字符集有數(shù)據(jù)庫字符集和客戶端字符集,對你這種情況來說,導出和導入都要涉及,也就是說你要保證4個字符集都一致才行
exp時源數(shù)據(jù)庫字符集,客戶端字符集
imp時目標數(shù)據(jù)庫字符集和客戶端字符集
如果你就在數(shù)據(jù)庫服務(wù)器上導出或者導入,那么你這機器既作為數(shù)據(jù)庫服務(wù)器也做導入導出客戶端
字符集的問題
如果是應(yīng)用應(yīng)用服務(wù)器連接的數(shù)據(jù)庫,查看和修改應(yīng)用服務(wù)器的字符集與oracle數(shù)據(jù)庫字符集是否一致。
如果是通過oracle客戶端(包括pl/sql developer )等連接的數(shù)據(jù)庫,查看和修改該客戶端使用的oraclehome的字符集設(shè)置,一般在注冊表中。具體根據(jù)使用的oracle客戶端查找。
應(yīng)該是你倒出或者是倒入時用錯了客戶端的字符集,或者是源庫和目標庫的字符集本身就不兼容
分別在源庫和目標庫查詢一下數(shù)據(jù)庫字符集:
select value$ from props$ where name like 'NLS_CHAR%';
看它們是否一致,如果不一致,基本上你就不能用導入的方法來在這兩庫之間遷移這個數(shù)據(jù)
如果一致,再檢查一下導出和導入所用機器的字符集(客戶端字符集),windows要看注冊表,UNIX要看操作系統(tǒng)用戶的環(huán)境變量
1,修改Oralce的編碼格式
2,修改主機的編碼格式
3,查看自己導入的數(shù)據(jù)是否已經(jīng)亂碼