2011-07-12 4 views
0

巨大なファイルである約3GBのMySQLバックアップファイルがあります。 JPEGイメージ・データを格納するLONGBLOB列を持つ表が1つあります。EmEditorを使用してUnicodeファイルを別のフォーマットに保存すると、そのフォーマットが歪み/変更されます。溶液?

ファイルは、MySQL Workbenchからデータインポート/復元を実行すると正常にインポートされます。

別のプログラムがこのデータを別のMySQLデータベースにインポートできるかどうかをテストできるように、このファイルを開き、最初の数行(イメージデータを含むテーブルのINSERT行約2行)を抽出する必要があります。

EmEditor(大きなファイルを開くのが良い)でファイルを開こうとしましたが、スクリプトの1つのInsertステートメントだけを新しいファイルにコピーして貼り付けました。バックアップスクリプトの最初のテーブル)を選択し、選択したファイルを新しいファイルに貼り付けます。ここで

は問題が来る:

しかし、これは(私はUTF8として保存していても)エンコーディングを台無しに。この新しいファイル(MySQL Workbenchを再び使用)をMySQLデータベースにインポート(復元)しようとすると、これが実現します。復元はエラーなしで先行しますが、BLOB列のJPEGイメージは破棄されます。

私の推測では、元のファイルと新しいファイルのエンコーディングが異なると思います。

EmEditorは元のファイルにエンコードを表示せず、検出するオプションがあり、「UTF8符号なし」として検出します。しかし、保存すると、UTF8として保存します。私はANSI、ISO8859(Windowsのデフォルト)などとしても保存しようとしましたが、毎回同じ結果になりました。

この特定の問題の解決策はありますか?つまり、巨大なバックアップファイルの最初の数行だけをカットし、新しいファイルに保存してエンコーディングを同じにして、画像(ブロブ)が変更されないようにしたいとします。 EmEditorでこれを行う方法はありますか(つまり、私は間違ったアプローチをしていますか?)これを行うための特別なソフトウェアはありますか?ここで何がうまくいかないのかどうすれば診断できますか?

ありがとうございました。

答えて

0

これは、エンコード(私はUTF8として保存していても)

UTF-8は、任意のバイナリデータのための良い選択ではありません台無し。 UTF-8では有効ではない上位バイトのシーケンスがたくさんあるので、load-alter-saveプロセス中のある時点でそれらをマングルするでしょう。

すべての1バイトを一意の文字にマッピングするエンコードを使用してファイルをロードし、同じエンコードを使用してファイルを再保存する場合は、元のコンテンツ(*)を保持する必要があります。 ISO-8859-1は、この目的のために通常選択されるエンコーディングです.0.0xFFの各バイトを同じ番号のUnicodeコードポイントに単純にマップするためです。

(*:エディタと仮定すると\n/\rおよびその他の制御文字が...私はEmEditorのは可能と信じて、ヌルのような他のトリッキーなポイントについてバイナリセーフです。)

0

元のファイルを開きますEmEditor、エンコードをバイナリ(ASCIIビュー)として選択しようとしました。 bobinceが述べたように、バイナリ(ASCIIビュー)は各バイトを一意の文字にマップし、ファイルを保存するときにそれを保持します。私はこれがあなたの問題を解決するはずだと思います。

関連する問題