>Using
sqlldr
在 Oracle 表中加载数据不会导致任何错误,但字段的值是乱码。 当然不是所有的值,只有波斯语(阿拉伯语(格式的值。 已经在这里阅读了许多问题,但无法解决问题,与此问题最相关的主题是:[生成的sqlplus文件中的字符不可读 虽然我的情况中的值不是问号,而是类似 ,ÑÇå Âåä 或 äÇ ãÔÎÕ
还玩了NLS_LANG环境变量,但无济于事。
使用不同的字符集创建了不同的预言机数据库,这也无济于事。
我是 Oracle 的新手,所以很可能我在创建数据库和设置字符集或其他东西时犯了一个新手错误,老实说我不知道。 但是尝试了许多用户的回复,我在这里。
我上传了表架构和 Ctl 扩展文件以复制问题,相关文件的链接驻留在以下链接中:[https://www.dropbox.com/sh/ejxvast0ruioksk/AABXhjujqzhRpuMVjl7V-zxUa?dl=0][1]
总共有三个字符集或编码。
- 您的文件的编码是什么?检查编辑器或创建文件的应用程序的保存选项。
- 命令行窗口的字符集
cmd.exe
,称为"代码页"。您可以使用命令chcp
询问(或更改( - 数据库的字符集。
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';
这里是代码页标识符列表
另请参阅 OdbcConnection 将中文字符返回为"?"以获取更多详细信息。