使用Oracle SQL Loader(sqlldr)加载数据时的乱码值

时间:2018-10-21 09:18:20

标签: oracle encoding oracle11g sql-loader

使用

  

sqlldr

将数据加载到oracle表中不会导致任何错误,但是字段的值是乱码。当然,不是所有的值,只有波斯(阿拉伯)格式的值。 已经在此处阅读了许多问题,但无法解决问题,与此问题最相关的主题是:[Unreadable character in generated sqlplus file 尽管在我的案例中这些值不是问号,但类似于,ÑÇåÂåä或äÇãÔÎÕ

还使用了NLS_LANG环境变量,但无济于事。

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

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

我上载了表架构和Ctl扩展文件以复制问题,指向相关文件的链接位于此链接中:[https://www.dropbox.com/sh/ejxvast0ruioksk/AABXhjujqzhRpuMVjl7V-zxUa?dl=0][1]

1 个答案:

答案 0 :(得分:1)

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

  1. 文件的编码是什么?检查编辑器或创建文件的应用程序的保存选项。
  2. 命令行窗口cmd.exe的字符集,称为“代码页”。您可以使用命令chcp来查询(或更改)
  3. 数据库的字符集。

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

3)可以不同,但​​是字符集必须支持波斯语/阿拉伯语字符,因此很可能是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

的列表

另请参阅OdbcConnection returning Chinese Characters as "?",以获取更多详细信息。