【问题标题】:IIB: INSERT INTO Oracle Database "¿" (inverted question marks) and chinese charactersIIB: INSERT INTO Oracle Database "¿"(倒问号)和汉字
【发布时间】:2021-04-04 22:03:28
【问题描述】:

我是 Oracle Database 和 IBM Integration Bus 的新手,我正在尝试使用 IBM Integration Bus 中 ESQL 的 INSERT INTO 函数来插入 CSV 文件的数据。

我正在使用带有 ISO-8859-1 编码的 DFDL 来读取文件。使用调试器时,该消息在 SQLPLUS 和 SQL Developer 中清晰可读。

我已经尝试更改我的 Oracle 数据库中的 NLS_CHARARCTERSET 设置,尽管我不确定我需要哪种编码。默认情况下它是 AL32UTF8,我尝试了 UTF8,WE8ISO8859P1。

我还更改了 DFDL 的编码并将 ODBC 驱动程序的设置更改为使用 Oracle NLS 设置(默认)、使用 Microsoft 区域设置和使用美国设置。

如果我尝试使用 INSERT INTO 命令,数据库返回反问号或汉字,这显然不是我想要的。

编辑: 如果我硬编码 INSERT INTO 值,它也会返回问号。 CSV 的编码无关紧要。我还发现 CSV 文件的数据显示为空。当我对 INSERT INTO 中的值进行硬编码时,我得到了倒置的问号。

【问题讨论】:

  • 不使用IIB,直接使用insert查询能否将相同的数据正确插入数据库?
  • 源应用程序在编写文件时使用了什么编码?
  • @frabar 该查询在 SQL Developer 和 SQL Plus 中运行良好。仅供参考,它也适用于 passthru。
  • @kimbert 如果您指的是 CSV 文件的编码。它是 Windows 1250,因为输入文件有像“ß”这样的字符。

标签: oracle odbc ibm-integration-bus embedded-sql


【解决方案1】:

它是 IIB ODBC Driver for Oracle 中的一个简单选项。只需确保选中高级选项卡中的“启用 SQL 描述参数”即可。

【讨论】:

  • 这对我有用。非常感谢!
【解决方案2】:

如果您指的是 CSV 文件的编码。它是 Windows 1250,因为输入文件有像“ß”这样的字符

我不明白那句话。使用字符“ß”并不一定意味着 Windows 1250。您是否有任何其他支持证据证明这一说法?

如果您的声明正确,则您的 DFDL 架构不正确。您无法使用单字节解码器解析多字节编码。因此,您应该做的第一件事是将 DFDL 模式的格式块中的“编码”属性更改为“5346”(根据https://www.ibm.com/support/knowledgecenter/en/SSRH46_3.0.0_SWS/dni_ccsids_and_char_set_names.html)。

但是(我很抱歉重复这一点,但这真的很重要......)检查您对 Windows 1250 的假设是否正确。然后确保 DFDL 架构中的编码与 CSV 文件的编码匹配。

【讨论】:

    猜你喜欢
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    相关资源
    最近更新 更多