2017-07-28 71 views
0

我遷移數據庫從Postgres而言,要oracle.I創建與此命令的CSV文件:從Postgres的到Oracle遷移奇怪字符(ANSI)

\複製到TTT「C:\測試\ ttt.csv 'CSV DELIMITER','HEADER encoding'UTF8'quote as''';然後用oracle sql loader將數據放入oracle表中 沒關係,但我在某些描述中說明這個字符不在原始數據庫中 DB的Postgres編碼是UTF8我就是一個窗口的機器上。 感謝所有。 吉安皮耶羅

+0

開始之前SQLLOADER運行'NLS_LANG = .AL32UTF8'和'CHCP 65001' –

+0

好的設置。它的工作。感謝你。兩個問題:1)你明白爲什麼有這個問題? 2)我的sql加載程序是由一個java程序觸發你認爲從命令行運行這個命令足以啓動java或者我應該從程序本身運行它嗎?無論如何,我現在正在做測試 –

+0

提供更多信息作爲答案。 –

回答

1

開始之前SQLLOADER運行

chcp 65001  
set NLS_LANG=.AL32UTF8 
  • chcp 65001套你cmd.exeUTF-8
  • 隨着set NLS_LANG=.AL32UTF8(由SQLLOADER和SQLPLUS繼承)的代碼頁你告訴Oracle數據庫 「客戶端使用UTF-8」

無這些命令你會有這種情況(由於默認)

chcp 850 
set NLS_LANG=AMERICAN_AMERICA.US7ASCII 

也許你的電腦上,你有代碼頁437,而不是850,這取決於你的電腦是否是美國或歐洲,看到National Language Support (NLS) API Reference,列OEM codepage

您可以在PC設置中設置NLS_LANG也爲環境變量或者你可以在註冊表定義它在HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_%ORACLE_HOME_NAME%\NLS_LANG(對於32位), HKLM\SOFTWARE\ORACLE\KEY_%ORACLE_HOME_NAME%\NLS_LANG

你也可以改變你的cmd.ext執着的代碼頁,見https://stackoverflow.com/a/33475373/3027266

有關NLS_LANG詳見https://stackoverflow.com/a/33790600/3027266