0

非常に多数の mysql DB をいくつかの共有 Web ホストから 1 つの共有 Web ホストに移行しています。

これらの大部分はポルトガル語であるため、かなりの数の特殊文字があります。私が移行している DB の一部は latin1 で、一部は cp1251 で、一部は utf8 です。

もちろん、単純に DB をダンプし、そのダンプを新しいホストに復元すると、エンコーディングと "?" が完全に無効になります。データベースに関連付けられた実際の Web サイトには、文字やその他のナンセンスが表示されます。

小規模では、何をダンプ/復元するかを知るために、html charset タグをいじることは許容されますが、問題は、何千ものデータベースと Web サイトを扱っており、移行がすべて自動的に行われることです。いくつかのスクリプト。

作業を行うスクリプトが HTML タグで指定されたエンコーディングを認識しないと仮定して、これらの DB をダンプ/復元する最良の方法についての提案を探しています。

これまでのところ、実際の mysqldump ツールを使用してみたり、php スクリプトでそれを模倣したり、テキスト ファイルとの間ではなくメモリとの間でダンプしたりしてみましたが、どちらもデータを 1 つずつ完全に複製するようには見えません。その他、エンコードの問題なし。

UTF8 を使用してダンプをエンコードし、HTML コードページに関係なくそのまま復元する必要がありますか? HTMLコードページに関係なくUTF8で両方をダンプして復元しますか? 各 create table ステートメントで見つかったデフォルトの文字セットでダンプして復元しますか?

これらのさまざまなシナリオの影響と影響についての私の理解は限られていますが、基本的に知っておく必要があるのは、スクリプトの HTML で使用されるコードページを知らなくても、2 つのデータベース サーバー間でエンコードの問題なしにデータを完全に複製する方法があるかどうかです。データにアクセスしています。

4

1 に答える 1

0

エンコーディングは、特にデータベースを移動する場合、取り組むのが非常に難しい問題です。最初に構造体のインポートを実行してから、データベースの文字セット、テーブルのデフォルトの文字セット、および列の文字セットに特に注意して、新しい構造体を古い構造体と正確に比較してください。これらの情報は、information_schemaデータベースから非常に簡単に取得できます。

それらが完全にミラーリングされたら、インポートを開始できます。ただし、異なるエンコードされた列に異なるエンコードタイプの文字を保持できることに注意してください(latin1列にutf8の有効な文字を含めることは非常に一般的ですが、latin 1は1バイトの文字セットですが、utf8はupの文字を含めることができます3バイトまで)。

この後、さまざまな方法でダンプを変換できますが、私が知る限り、同じ列にある混合エンコーディングタイプのこのタイプのケースを変換する100%有効な方法はありません。最終的には、手動でクリーンアップする必要があるかもしれません。しかし、うまくいけば、最初のアプローチで十分であり、すべてがうまくいくでしょう。

于 2012-12-28T22:49:53.983 に答える