使用 Oracle SQL Loader (sqlldr) 加载数据时出现乱码字段值

Gibberish filed values when Loading data with Oracle SQL Loader (sqlldr)

使用

sqlldr

在 oracle 中加载数据 table 不会导致任何错误,但字段的值是乱码。当然不是所有的值,只有波斯语(阿拉伯语)格式的值。 已经在这里阅读了很多问题但无法解决问题,与此问题最相关的table主题是:[ 尽管我的情况下的值不是问号,而是类似 ,ÑÇå Âåä 或 äÇ ãÔÈÕ

也尝试了 NLS_LANG 环境变量,但没有用。

用不同的字符集创建了不同的 oracle 数据库,这也无济于事。

我是 oracle 的新手,所以我很可能在创建数据库和设置字符集或其他东西时犯了菜鸟错误,老实说我不知道​​。但尝试了很多用户的回复,我在这里。

我上传了 table 架构和 Ctl 扩展文件来复制问题,link 相关文件位于此 link:[https://www.dropbox.com/sh/ejxvast0ruioksk/AABXhjujqzhRpuMVjl7V-zxUa?dl=0][1]

总共有 三个 字符集或编码。

  1. 你的文件编码是什么?检查创建文件的编辑器或应用程序的保存选项。
  2. 你的命令行的字符集windowcmd.exe,叫做"codepage"。您可以使用命令 chcp
  3. 询问(或更改)
  4. 你的数据库的字符集。

1) 和 2) 必须相同。使用命令 chcp 将它们设置为相等(或在您的编辑器中更改设置)

3) 可以不同,但​​字符集必须支持 persian/arabic 个字符,因此很可能 AL32UTF8 现在是默认设置。

使用 NLS_LANG 值告诉数据库哪个字符集用于 1) 和 2),示例

C:\>chcp 1256
Aktive Codepage: 1256.

C:\>set NLS_LANG=.AR8MSWIN1256

C:\>sqlldr ...

您可以使用此查询获取代码页与 Oracle 字符集的列表:

SELECT VALUE AS ORACLE_CHARSET, UTL_I18N.MAP_CHARSET(VALUE) AS IANA_NAME
FROM V$NLS_VALID_VALUES
WHERE PARAMETER = 'CHARACTERSET';

这里是 Code Page Identifiers

的列表

另请参阅 以获取更多详细信息。