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>.</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とサポート契約を結んでいますか?もしそうなら、それを使用してください—それははるかに速くなります。

理想的には、小さなテーブルで破損を示す必要があります。1つは、完全なデータの列の小さなサブセット(2または3列、そのうちの1つはLVARCHAR列)と少数の行(10未満)です。 。それを作成できるほど幸運ではないかもしれません。リストされている質問は、最初に尋ねられる質問である可能性があります(おそらくoncheck情報を除く)。

于 2013-03-26T16:31:33.490 に答える