1

我面临以下问题:

我(错误地)删除了表中的一个键,然后通过这种方式恢复了整个表:

LOAD FROM 'C:\db\rqrequesttrans.dat' delimiter '~' insert into rqrequesttrans

几乎一切正常,但我在某个LVARCHAR字段中损坏了数据:

例如:

<p>ääÊãÑå ÈÇäÊæÈ ÈÇääÇÒå.</p>代替<p>للتكرم بالتنبيه باللازم.</p>

我该如何解决这个问题?

4

1 回答 1

1

这不是一个真正的答案。这是一些分析,并要求提供更多信息。

分析

阿拉伯语数据在我的浏览器中显示为 UTF-8:

0x3C = U+003C
0x70 = U+0070
0x3E = U+003E
0xD9 0x84 = U+0644
0xD9 0x84 = U+0644
0xD8 0xAA = U+062A
0xD9 0x83 = U+0643
0xD8 0xB1 = U+0631
0xD9 0x85 = U+0645
0x20 = U+0020
0xD8 0xA8 = U+0628
0xD8 0xA7 = U+0627
0xD9 0x84 = U+0644
0xD8 0xAA = U+062A
0xD9 0x86 = U+0646
0xD8 0xA8 = U+0628
0xD9 0x8A = U+064A
0xD9 0x87 = U+0647
0x20 = U+0020
0xD8 0xA8 = U+0628
0xD8 0xA7 = U+0627
0xD9 0x84 = U+0644
0xD9 0x84 = U+0644
0xD8 0xA7 = U+0627
0xD8 0xB2 = U+0632
0xD9 0x85 = U+0645
0x2E = U+002E
0x3C = U+003C
0x2F = U+002F
0x70 = U+0070
0x3E = U+003E

其他数据显示为来自 ISO 8859-1(或 8859-15)的 UTF8 编码字符:

0x3C = U+003C
0x70 = U+0070
0x3E = U+003E
0xC3 0xA4 = U+00E4
0xC3 0xA4 = U+00E4
0xC3 0x8A = U+00CA
0xC3 0xA3 = U+00E3
0xC3 0x91 = U+00D1
0xC3 0xA5 = U+00E5
0x20 = U+0020
0xC3 0x88 = U+00C8
0xC3 0x87 = U+00C7
0xC3 0xA4 = U+00E4
0xC3 0x8A = U+00CA
0xC3 0xA6 = U+00E6
0xC3 0x88 = U+00C8
0x20 = U+0020
0xC3 0x88 = U+00C8
0xC3 0x87 = U+00C7
0xC3 0xA4 = U+00E4
0xC3 0xA4 = U+00E4
0xC3 0x87 = U+00C7
0xC3 0x92 = U+00D2
0xC3 0xA5 = U+00E5
0x2E = U+002E
0x3C = U+003C
0x2F = U+002F
0x70 = U+0070
0x3E = U+003E

我们可以看到<p>and.</p>数据是常见的,空白 U+0020 出现在相同的地方。

对齐数据块,我们可以有些一致性和不一致性:

0xD9 0x84 = U+0644  :  0xC3 0xA4 = U+00E4   Delta = 0x0560
0xD9 0x84 = U+0644  :  0xC3 0xA4 = U+00E4   Delta = 0x0560
0xD8 0xAA = U+062A  :  0xC3 0x8A = U+00CA   Delta = 0x0560
0xD9 0x83 = U+0643  :  0xC3 0xA3 = U+00E3   Delta = 0x0560
0xD8 0xB1 = U+0631  :  0xC3 0x91 = U+00D1   Delta = 0x0560
0xD9 0x85 = U+0645  :  0xC3 0xA5 = U+00E5   Delta = 0x0560
0x20      = U+0020  :  0x20      = U+0020

0xD8 0xA8 = U+0628  :  0xC3 0x88 = U+00C8   Delta = 0x0560
0xD8 0xA7 = U+0627  :  0xC3 0x87 = U+00C7   Delta = 0x0560
0xD9 0x84 = U+0644  :  0xC3 0xA4 = U+00E4   Delta = 0x0560
0xD8 0xAA = U+062A  :  0xC3 0x8A = U+00CA   Delta = 0x0560
0xD9 0x86 = U+0646  :  0xC3 0xA6 = U+00E6   Delta = 0x0560
0xD8 0xA8 = U+0628  :  0xC3 0x88 = U+00C8   Delta = 0x0560
0xD9 0x8A = U+064A
0xD9 0x87 = U+0647
0x20      = U+0020  :  0x20      = U+0020

0xD8 0xA8 = U+0628  :  0xC3 0x88 = U+00C8   Delta = 0x0560
0xD8 0xA7 = U+0627  :  0xC3 0x87 = U+00C7   Delta = 0x0560
0xD9 0x84 = U+0644  :  0xC3 0xA4 = U+00E4   Delta = 0x0560
0xD9 0x84 = U+0644  :  0xC3 0xA4 = U+00E4   Delta = 0x0560
0xD8 0xA7 = U+0627  :  0xC3 0x87 = U+00C7   Delta = 0x0560
0xD8 0xB2 = U+0632  :  0xC3 0x92 = U+00D2   Delta = 0x0560
0xD9 0x85 = U+0645  :  0xC3 0xA5 = U+00E5   Delta = 0x0560

因此,很明显,沿线某处存在问题。很可能存在代码集问题。我所知道的常量 0x0560 并不重要,除了字符代码正确和不正确的事实之外,这就是幻数。

问题

没有很多问题的很多答案,没有人能给你很多帮助。当然,某些答案很可能会使某些问题变得毫无意义。

  1. 你在哪个平台上运行?(O/S 名称和版本;CPU 类型。)给定加载文件名,您很可能正在运行某个版本的 Windows。是Win32还是Win64?哪个版本的 Windows?
  2. 您使用的是哪个版本的 Informix?(例如,Informix 11.70.FC7W2。)
  3. 您正在使用的数据库的语言环境 (DB_LOCALE) 是什么?(例如:en_us.8859-1。)
  4. 什么是客户端语言环境 (CLIENT_LOCALE)?
  5. 数据文件是如何C:\db\rqrequesttrans.dat创建的?区域设置是否相同?
  6. 示例数据来自该文件中的哪些字节?
  7. 您是否在 DB-Access 或其他地方执行了 LOAD 命令?如果是别的,什么?
  8. 数据文件有多大?
  9. 表的架构是什么?
  10. 表中有多少行?
  11. LVARCHAR 字段中的损坏是否跨行一致?
  12. 您是否能够为包含该表的数据页进行页面转储?(oncheck -pp或者oncheck -pP,可能)
  13. 您是否与 IBM 签订了支持合同?如果是这样,请使用它 - 到目前为止它会更快。

理想情况下,您将在一个小表中演示损坏 — 一个包含完整数据列的一小部分(2 或 3 列,其中之一是 LVARCHAR 列)和少量行(10 以下) . 我们可能没有那么幸运能够创造它。列出的问题可能是最先被问到的问题(也许oncheck信息除外)。

于 2013-03-26T16:31:33.490 回答