使用nzload加载特殊字符

2023-11-30

我在 Oracle 表数据中扩展了 ascii 字符,我可以使用带有 \ 转义字符前缀的 sqlplus 将其提取到文件中。我想使用 nzload 将完全相同的数据加载到 netezza 表中。

nzload 在遇到此 char seq (c2bf) 时添加几个额外字节 在提取的文件数据中:

echo "PROFESSIONAL¿" | od -x
0000000  5052 4f46 4553 5349 4f4e 414c **c2bf** 0a00

加载后:

echo "PROFESSIONAL¿" | od -x
0000000  5052 4f46 4553 5349 4f4e 414c **c382 c2bf**

在 nzload 命令行上,我有以下选项: -escapechar \ -ctrlchars

任何人都可以提供任何帮助吗?


我对 Unicode 转换问题不是很了解,但我以前自己也这样做过,我将演示我认为正在发生的情况。

我相信您在这里看到的不是使用 nzload 加载特殊字符的问题,而是您的显示/终端软件如何显示数据和/或 Netezza 如何存储字符数据的问题。我怀疑与 UTF-8(Netezza 支持的 Unicode 编码)之间存在双重转换。让我们看看我们能否找出它是什么。

在这里,我使用 PuTTY,默认(对我而言)远程字符集为 Latin-1。

$ od -xa input.txt
0000000    5250    464f    5345    4953    4e4f    4c41    bfc2    000a
          P   R   O   F   E   S   S   I   O   N   A   L   B   ?  nl
0000017

$ cat input.txt
PROFESSIONAL¿

从这里我们可以看到od该文件仅包含我们期望的数据,但是当我们cat该文件我们看到了额外的字符。如果文件中没有该字符,则该字符可能来自显示翻译。

如果我将 PuTTY 设置更改为 UTF-8 作为远程字符集,我们会看到这样的结果:

$ od -xa input.txt
0000000    5250    464f    5345    4953    4e4f    4c41    bfc2    000a
          P   R   O   F   E   S   S   I   O   N   A   L   B   ?  nl
0000017
$ cat input.txt
PROFESSIONAL¿

因此,相同的源数据,但有两种不同的屏幕表示,这并非巧合,与您的两个不同输出相同。相同的数据至少可以以两种方式显示。

现在让我们看看它如何加载到 Netezza 中,一次加载到 VARCHAR 列中,然后再次加载到 NVARCHAR 列中。

create table test_enc_vchar (col1 varchar(50));
create table test_enc_nvchar (col1 nvarchar(50));

$ nzload -db testdb -df input.txt -t test_enc_vchar -escapechar '\' -ctrlchars
Load session of table 'TEST_ENC_VCHAR' completed successfully
$ nzload -db testdb -df input.txt -t test_enc_nvchar -escapechar '\' -ctrlchars
Load session of table 'TEST_ENC_NVCHAR' completed successfully

加载的数据没有错误。请注意,当我指定 escapechar 选项时nzload,此特定输入数据样本中的任何字符都不需要转义,也没有转义。

我现在将使用 SQL 扩展工具包中的 rawtohex 函数作为数据库内工具,就像我们使用过的那样od从命令行。

select rawtohex(col1) from test_enc_vchar;
           RAWTOHEX
------------------------------
 50524F46455353494F4E414CC2BF
(1 row)

select rawtohex(col1) from test_enc_nvchar;
           RAWTOHEX
------------------------------
 50524F46455353494F4E414CC2BF
(1 row)

此时,两列似乎具有与输入文件完全相同的数据。到目前为止,一切都很好。

如果我们选择该列怎么办?作为记录,我在 PuTTY 会话中使用 UTF-8 远程字符集执行此操作。

select col1 from test_enc_vchar;
      COL1
----------------
 PROFESSIONAL¿
(1 row)

select col1 from test_enc_nvchar;
     COL1
---------------
 PROFESSIONAL¿
(1 row)

相同的二进制数据,但显示不同。如果我然后将每个选择的输出复制到echo通过管道传送到od,

$ echo PROFESSIONAL¿ | od -xa
0000000    5250    464f    5345    4953    4e4f    4c41    82c3    bfc2
          P   R   O   F   E   S   S   I   O   N   A   L   C stx   B   ?
0000020    000a
         nl
0000021

$ echo  PROFESSIONAL¿ | od -xa
0000000    5250    464f    5345    4953    4e4f    4c41    bfc2    000a
          P   R   O   F   E   S   S   I   O   N   A   L   B   ?  nl
0000017

根据此输出,我打赌您正在将示例数据(我还打赌为 UTF-8)加载到 VARCHAR 列而不是 NVARCHAR 列中。这本身并不是问题,但可能会产生显示/转换问题。

一般来说,您希望将 UTF-8 数据加载到 NVARCHAR 列中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用nzload加载特殊字符 的相关文章

  • 检查 Python 中的有效 utf8 字符串

    我正在从文件系统读取文件名 并且想将它们作为 JSON 编码数组发送 问题是文件系统上的文件可以以无效的编码存储 我需要处理这种情况以在将其传递给之前省略无效的文件名json dump 否则会失败 有没有办法检查我的字符串 文件名 是否包含
  • 在 MVC3 应用程序中使用具有表单身份验证的 Oracle 数据库

    我编写了一个简单的 MVC3 应用程序 并遵循了有关如何设置经过身份验证的用户的教程 本教程使用 SQL Server Express 数据库 是否可以使用 Oracle 数据库代替 SQL Server 这只是更改 web config
  • 如何从 Oracle 中获取格式化的 XML

    我对 Oracle 缺乏经验 并且在将数据导出为 XML 时遇到问题 我已经设法让这个查询正常工作 但 XML 的格式似乎是固定的 对我来说不起作用 这是查询 SELECT value em getClobVal AS output FRO
  • SQL SELECT 对值求和,不包括重复项

    我在 Oracle SQL 中遇到一个问题 我正在尝试解决这个问题 我将用一个例子来说明 我正在查询三个表 Employees EmployeeID Name 1 John Smith 2 Douglas Hoppalot 3 Harry
  • 在 Oracle 过程中实现多线程

    我正在研究 Oracle 10gR2 这是我的问题 我有一个程序 我们称之为 proc parent 在包内 应该调用另一个过程 让我们调用它 用户创建 我得打电话 用户创建 在一个循环中 它从表中读取一些列 并且这些列值作为参数传递给 用
  • 当网站停止时,Oracle 数据提供程序会固定 IIS 工作进程

    我们在 Oracle 11g 第 2 版中遇到了一个严重的问题 其中 w3wp 进程接管了整个处理器核心 并且调试显示 Oracle 数据提供程序无限地抛出 ThreadAbortException 开发人员通过执行以下操作发现了此问题 1
  • 尝试在 Oracle 11.2.0.2.0(64 位)中获取连接时出现 java.lang.ArithmeticException

    我目前正在 Oracle 中使用 Java 存储过程 并且在尝试在 Java 代码中获取连接时看到一些奇怪的行为 我的Java被打包成jar文件 然后使用以下命令部署到Oracle中loadjava命令行实用程序 Apackage然后在数据
  • 如何记录更改列 DDL 操作

    我需要创建一个数据库触发器来记录每个更改 Add Column Modify Column Drop Column 使用Oracle的模式触发器在特定表中执行语句 如何获得 到目前为止我尝试了下面的代码 TRIGGER after ddl
  • 替换非 UTF8 字符

    在 php 中 我需要替换字符串中的所有非 UTF8 字符 然而 并不是通过某种等价物 比如iconv功能与 TRANSLIT 但是由一些选定的角色 例如 or 例如 通常 我希望用户能够看到找到无效字符的位置 我没有找到任何执行此操作的函
  • 印地语在 tcpdf 上无法正确显示

    我创建了以下代码 用于在 tcpdf 中使用 arial unicode 字体显示印地文文本 pdf new TCPDF PDF PAGE ORIENTATION PDF UNIT PDF PAGE FORMAT true UTF 8 fa
  • 在 git 提交消息中使用任何 utf-8 字符是否安全?

    我发现使用 UTF8 字符 例如 很有用 请参阅here http www utf8icons com subsets dingbats 在提交消息中 重构 NewService 添加了更好的服务 OldServiceA 据我所见 它see
  • 如何从 TOAD for Oracle 执行函数并将结果绑定到数据网格

    我有一个函数 它将 pl sql 对象的 VARRAY 作为其参数之一 如何执行此存储过程并将其返回的结果集绑定到 TOAD for Oracle 中的数据网格 经过一番搜索后 我找到了自己问题的答案 假设您的 varray 类型称为 va
  • 无法在 Python 2.4 中解码 unicode 字符串

    这是Python 2 4 中的 这是我的情况 我从数据库中提取一个字符串 它包含一个变音的 o xf6 此时 如果我运行 type value 它会返回 str 然后我尝试运行 decode utf 8 但收到错误 utf8 编解码器无法解
  • Perl 和 Unix 如何以相同的顺序对 Unicode 字符串进行排序?

    我正在尝试获取 Perl 和 GNU Linuxsort 1 程序就如何对 Unicode 字符串进行排序达成一致 我在跑sort with LANG en US UTF 8 在Perl程序中我尝试了以下方法 use Unicode Col
  • Oracle TDE 能否保护数据免受 DBA 的侵害?

    甲骨文专家 我的客户想要部署一个必须在数据库中保存信用卡号的应用程序 客户显然很关心安全性 我们特别关注一个令人痛苦的问题 我们如何确保只有具有 业务需要知道 的授权用户才可以访问数据 我们如何保护数据免受 DBA 的侵害 一个明显的解决方
  • C# 按钮文本 Unicode 字符

    C 不想在按钮上放置 Unicode 字符 如果我将 u2129 放入按钮的 文本 属性中 按钮将显示 u2129 而不是 Unicode 字符 例如 我选择 2129 因为我可以在计算机上当前活动的字体中看到它 我之前看到过这个问题链接文
  • Oracle:如何确定“AFTER ALTER”触发器中对象的新名称?

    假设我有一个AFTER ALTER在我的 Oracle 数据库上触发并重命名一些数据库对象 ALTER RENAME TO 在触发器中 我如何确定new数据库对象的名称 看来ORA DICT OBJ OWNER ORA DICT OBJ N
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • SQL 国家字符 (NCHAR) 数据类型的真正用途是什么?

    也CHAR CHARACTER and VARCHAR CHARACTER VARYING SQL 提供了NCHAR NATIONAL CHARACTER and NVARCHAR NATIONAL CHARACTER VARYING 类型
  • 在 Oracle 行的多个列上使用透视

    我在 Oracle 表中有以下示例数据 tab1 我正在尝试将行转换为列 我知道如何在某一列上使用 Oracle 数据透视表 但是否可以将其应用于多个列 样本数据 Type weight height A 50 10 A 60 12 B 4

随机推荐