非常に大きなMySQLデータベース(1.6GB-ほとんどがBLOB)をエクスポートして、新しいサーバーにインポートしようとしています。私はほとんどの問題を解決し、最終的にエラーなしでインポートを完了しました。MySQLクエリブラウザを使用して、画像のBLOBを含むテーブルでクエリを実行し、ディスクに保存しました(クエリブラウザの保存アイコンを使用)。ファイルを開こうとすると、「画像形式が無効です」というエラーが表示されました。ええとああ。
クエリブラウザを使用して、ソースデータベースと最近インポートされた新しいデータベースの値を調べました。値が違うと思います。エンコーディングの問題か何かである可能性があります。これが私が見るものです:
ソース(有効なデータ)サーバー:
FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 60
00 60 00 00 FF DB 00 43 00 08 06 06 07 06 05 08
and so on...
新しいサーバー:
C3 BF C3 98 C3 BF C3 A0 00 10 4A 46 49 46 00 01
01 01 00 60 00 60 00 00 C3 BF C3 9B 00 43 00 08
and so on...
この例では、初心者の目には、「新しい」サーバーのデータの前に3バイトの余分なデータがあるように見えます。
次に、 010エディターを使用してSQLダンプファイルをチェックアウトしました。私はこの特定の例の行を見つけました、そしてここに私が見るものがあります:
FF D8 FF E0 5C 30 10 4A 46 49 46 5C 30 01 01 01
5C 30 60 5C 30 60 5C 30 5C 30 FF DB 5C 30 43 5C
30 08 06 06 07 06 05 08 and so on...
今、私は頭を抱えています。パターンが表示されます。HEXペア5C30が00と同じように見えるのに気づきましたが、その理由がわかりません。この時点で、ワイプされようとしているソースサーバーがあり、新しいサーバーに破損したデータがインポートされているのではないかと心配しています。これがMySQLでグローバル変数を設定することで解決できるある種のエンコーディングの問題であることを願っていますが、私は本当に知りません。
また、ソース(動作中の)サーバーと新しい(破損した)サーバーからファイルを保存すると、破損したファイルのファイルサイズが約40%大きくなることにも言及する必要があります。
両方のサーバーで文字セット変数を確認しました。
SHOW VARIABLES LIKE '%char%'
ソースサーバー:
character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
新しいサーバー:
character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
それらは同じです。