从 postgres 迁移到 oracle (Ansi) 中的奇怪字符

Posted

技术标签:

【中文标题】从 postgres 迁移到 oracle (Ansi) 中的奇怪字符【英文标题】:strange character in migration from postgres to oracle (Ansi) 【发布时间】:2017-07-28 14:45:20 【问题描述】:

我正在将一个数据库从 postgres 迁移到 oracle。我使用以下命令创建 csv 文件:

\copy ttt to 'C:\test\ttt.csv' CSV DELIMITER ',' HEADER encoding 'UTF8' quote as '"'; 然后使用 oracle sql loader 我将数据放入 oracle 表中。 没关系,但我在一些描述中描述了这个字符,它不在原始数据库中。 db postgres 的编码是 UTF8,我在窗口机器上。 谢谢大家。 吉安·皮耶罗

【问题讨论】:

在你启动sqlloader之前运行set NLS_LANG=.AL32UTF8chcp 65001 好的。它工作。谢谢你。两个问题:1)你明白为什么会出现这个问题吗? 2) 我的 sql 加载器是由 java 程序触发的 你认为从启动 java 的命令行运行这个命令就足够了,还是应该从程序本身运行它?反正我现在在做测试 提供了更多信息作为答案。 【参考方案1】:

在你启动 sqlloader 之前运行

chcp 65001    
set NLS_LANG=.AL32UTF8 
chcp 65001cmd.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://***.com/a/33475373/3027266

有关 NLS_LANG 的详细信息,请参阅https://***.com/a/33790600/3027266

【讨论】:

以上是关于从 postgres 迁移到 oracle (Ansi) 中的奇怪字符的主要内容,如果未能解决你的问题,请参考以下文章

从 Postgres 迁移到 MongoDB

将数据从postgres迁移/复制到vertica

Django 从 MySQL 迁移到 Postgres

使用 pg_dump 将 Postgres 从 Windows 迁移到 Linux 时如何选择正确的排序规则来创建数据库?

将数据库从 Heroku 迁移到 AWS

在 Postgres 迁移后,Rails 写入时间增加了 100%