問題の発生
LocalWPやXAMPPなどのローカル環境から本番サーバーへWordPressサイトを移行している最中だとします。phpMyAdminで「インポート」ボタンを押すまでは順調に見えますが、突然、次のようなイライラするメッセージとともにプロセスが停止してしまいます。
#1273 - Unknown collation: 'utf8mb4_unicode_520_ci'
このエラーにより、データベースの作成が途中で止まってしまいます。正常に動作するWebサイトの代わりに、空のデータベースと、あの恐ろしい「データベース接続確立のエラー」画面が残されることになります。
原因
原因は、移行元と移行先のサーバー間のバージョン差異です。utf8mb4_unicode_520_ci照合順序は、Unicode 5.2.0標準をサポートするためにMySQL 5.6およびMariaDB 10.1で導入されました。これは、絵文字や複雑な文字を処理するための現代的な標準です。
ローカル環境でMySQL 8.0を使用している一方で、本番環境がMySQL 5.5(10年以上前のバージョン)のような古いバージョンを動かしている場合、サーバーは「520_ci」という命令を認識できません。そのライブラリに該当する照合順序が存在しないためです。
解決策1:手動での検索と置換(100MB以下のファイルに最適)
すでに.sqlファイルがある場合は、エクスポートし直す必要はありません。VS Code、Sublime Text、Notepad++などの高機能なテキストエディタを使用して、互換性のない照合順序を取り除くことができます。
手順:
- エディタで
.sqlファイルを開きます。 Ctrl + H(Macの場合はCmd + H)を押して、検索と置換ツールを起動します。- 検索する文字列:
utf8mb4_unicode_520_ci - 置換後の文字列:
utf8mb4_unicode_ci - すべて置換をクリックして、ファイルを保存します。
それでも失敗しますか?一部の非常に古いサーバーはutf8mb4自体をサポートしていません。エラーが解消されない場合は、utf8mb4をutf8に、utf8mb4_unicode_ciをutf8_general_ciに置換してみてください。これにより、2005年以降のほぼすべてのサーバーと互換性のある形式にデータベースがダウングレードされます。
# 修正前:
CREATE TABLE `wp_posts` (
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
# 修正後:
CREATE TABLE `wp_posts` (
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
解決策2:互換モードでのエクスポート
もし元のサイトにまだアクセスできるのであれば、古いサーバーでも動作するようにphpMyAdminでエクスポートの設定を変更できます。
- 移行元のサーバーでphpMyAdminを開きます。
- エクスポートタブをクリックします。
- 詳細 - 可能なすべてのオプションを表示を選択します。
- フォーマット特有のオプションセクションを探します。
- 「作成するクエリの互換性(Database system or older MySQL server to maximize output compatibility with:)」の設定を
NONEからMYSQL40に変更します。 - 下にスクロールして実行をクリックします。
これにより、より古く汎用的な構文を使用してエクスポートが強制され、インポート時のエラー #1273を効果的に回避できます。
解決策3:コマンドラインを使用する(500MB以上のデータベースに最適)
巨大なSQLファイルは、標準的なテキストエディタをクラッシュさせます。大規模なデータベースを扱っている場合は、ターミナルでsedコマンドを使用して文字列を直接置換します。
# 照合順序の文字列を即座に置換するにはこれを実行します
sed -i 's/utf8mb4_unicode_520_ci/utf8mb4_unicode_ci/g' database_dump.sql
コマンドが終了したら、最高速でインポートするためにWP-CLIを使用します:
wp db import database_dump.sql
結果の再確認
インポートが完了したら、60秒かけてデータが「ダウングレード」に耐えられたか確認しましょう。以下の3点を確認してください。
- テーブル構造: phpMyAdminで
wp_postsテーブルを閲覧します。行が読み込まれれば、照合順序は受け入れられています。 - サイトの機能: WordPressのページをいくつかクリックして確認します。画像やメニューが正しく表示されているかチェックしてください。
- 特殊文字:
éではなくéのような「文字化け」がないか探します。これらが見られる場合は、コンテンツにutf8mb4が必要だったにもかかわらず、utf8_general_ciまでダウングレードしすぎた可能性があります。
次回以降の防止策
これを避ける最も簡単な方法は、開発環境と本番環境を同期させておくことです。ホストがMySQL 5.5を使用しているなら、ローカル開発にMySQL 8.0を使用しないでください。
あるいは、WP Migrate LiteやAll-in-One WP Migrationのような移行プラグインを使用してください。これらのツールはサーバーのバージョンを自動的に検出し、照合順序の変換を処理してくれるため、SQLコードを一行も触る必要がありません。

