从postgres迁移到oracle(Ansi)的奇怪角色

时间:2017-07-28 14:45:21

标签: oracle postgresql csv encoding character-encoding

我正在将db从postgres迁移到oracle.I使用此命令创建csv文件:

\ copy ttt to'C:\ test \ ttt.csv'CSV DELIMITER','HEADER encoding'UTF8'引用为''';然后使用oracle sql loader我将数据放入oracle表中。 这一切都还可以,但我在某些描述中有这个字符在原始数据库中不存在。 db postgres的编码是UTF8,我在一台窗口机器上。 谢谢大家。 吉安皮耶罗

1 个答案:

答案 0 :(得分:1)

在开始运行sqlloader之前

chcp 65001    
set NLS_LANG=.AL32UTF8 
  • chcp 65001将您的cmd.exe的代码页设置为UTF-8(由sqlloader和sqlplus继承)
  • 使用set NLS_LANG=.AL32UTF8告诉Oracle数据库“客户端使用UTF-8”

如果没有这些命令,您将遇到这种情况(由于默认设置)

chcp 850
set NLS_LANG=AMERICAN_AMERICA.US7ASCII 

也许在您的PC上,您有代码页437而不是850,这取决于您的PC是美国还是欧洲,请参阅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