EXP/IMP 中涉及到的字符集的設定

ljm0211發表於2012-07-02
     EXP和IMP是Oracle中使用頻率很高的資料匯入匯出的工具,當使用EXP/IMP將一個Server上的Oracle DB中的資料匯入另一Server上另一個Oracle DB時,就涉及到了4個字符集的問題。4個字符集分別為:資料來源Server的字符集、資料來源DB的字符集、目標Server的字符集、目標DB的字元 集。4個字符集不同時如何在匯入匯出時設定環境變數NLS_LANG才能保證資料匯出匯入成功呢?下面以一個例子來解釋這個問題。
     例如:資料來源Server OS字符集為Czech(捷克文字符集),資料來源DB為Big5(繁體中文字符集),目標Server OS字符集Mexico(墨西哥字符集),目標DB字符集CHS(簡體中文字符集)。現在要將資料來源DB的資料使用EXP/IMP工具匯入目標DB,在數 據源Server上匯出前要設定環境變數NLS_LANG=Big5,生成資料檔案後將資料檔案傳送到目標Server時,匯入前要設定環境變數 NLS_LANG=Big5,這樣才能保證匯入成功。
     下面對以上例子中設定環境變數的依據解釋一下。首先看資料來源,OS字符集為Czech,DB字符集為Big5,匯出資料檔案時,如果不設定環境變數 NLS_LANG,預設會按照OS的字符集生成資料檔案,這樣就會將Big5的資料按照Czech匯出,字符集不一致的情況下可能會出現編碼錯誤。所以要 將NLS_LANG設為Big5,環境變數是對OS而言的,這樣就生成以Big5字符集編碼的資料檔案,Big5->Big5保證了資料的正確。當 資料檔案傳送到目標Server時,可知該資料檔案是以Big5編碼的,在匯入目標DB時如果不設定環境變數,預設採用目標Server OS的字符集Mexico解析資料檔案,Big5的資料檔案採用Mexico字符集解析可能會出現問題,所以要設定環境變數NLS_LANG為Big5以 保證資料解析的正確。
     現在也許還存在一個疑問,資料檔案為Big5字符集,目標DB為CHS,環境變數NLS_LANG設定為Big5,能保證正確匯入目標DB嗎?其實在目標 Server解析資料檔案存在一個先解析再插入的過程,資料檔案先根據設定的環境變數的字符集解析成資料,而得到的資料再根據目標DB的字符集編碼插入 DB,因此我們只要保證資料檔案解析正確就可以了。
     從前面的例子可以總結一個規律,那就是資料來源Server和目標Server在執行匯入匯出前設定的環境變數NLS_LANG的值要與源DB一致。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11411056/viewspace-734349/,如需轉載,請註明出處,否則將追究法律責任。

相關文章