exp imp 導入Oracle的dmp文件報編碼錯誤


一、問題:這個是因為導出端的數據庫編碼和導入端的數據庫編碼不一致,我得導出端a是ZHS16GBKUNIX這種編碼格式,而導入端b的是AL32UTF8這種編碼格式,從而如果從a導出dmp文件,再導入到b端數據庫時,會報錯出編碼不一致,數據不能完整的導入進去

二、分析:使用exp命令導出的dmp文件的編碼會受到兩個原因影響,一個是a端數據庫的編碼,查詢sql:

SELECT * FROM NLS_DATABASE_PARAMETERS;

  

這個會影響導出dmp文件的數據內容,另一個是a端的系統編碼,即系統變量中的NLS_LANG參數值影響,如果NLS_LANG為空,那么導出的文件編碼會默認為數據庫的編碼,設置NLS_LANG值方法:

1.windows中,一次性設置,即在導入的窗口中直接設置

set NLS_LANG=american_america.AL32UTF8

  

2.windows中,直接設置環境變量:添加系統的(非某個用戶)環境變量

NLS_LANG=american_america.AL32UTF8

  

3.windows中,修改注冊表:Oracle的NLS_LANG為american_america.AL32UTF8

使用imp導入時,目標dmp文件的編碼會影響導入結果,這樣就需要設置b端的系統編碼,同上;

而數據庫的編碼不能夠輕易去改,要不會將已有的數據丟失,這里也會有一個問題,不同的數據庫編碼,會對字符(特指中文)的字段長度定義不一致,導入的時候會出現有的記錄因字段過長而不能導入,這是正常的(解決辦法:修改字段長度,重新導出導入);

三:辦法:同分析中的解決辦法一致,具體哪種方法,自己斟酌,

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM