WordPressを仮想サーバーからレンタルサーバー等にデータ移行(デプロイ)する際に
Unknown collation: 'utf8mb4_unicode_ci
というエラーが出る事があります。
これは仮想サーバーよりレンタルサーバーのデータベースのバージョンが低い場合に出る事があります。
「utf8mb4」というのは「utf8」の拡張版であり、今まで使われていた文字セットにさらに追加の文字セットが使えるようなります。
「utf8mb4」はバージョンが5.5.3以上のMySQLのデータベースで使用する事が出来ます。
問題は、WordPress 4.2からセキュリティー上の仕様でユーザーの許可なく、自動的にデータベースの文字コードを「utf8mb4」にしてしまうことです。例えば、5.5.3以上のMySQLのデータベースで、データベースを作成する際に、「utf8_general_ci」で作っても、新しいバージョンのwordpressと紐付けした際に、自動で「utf8mb4_unicode_ci」に書き換えられてしまいます。
その「utf8mb4_unicode_ci」に自動で書き換えられてしまった、データベースのデータを「utf8mb4」に対応していない古いデータベースにデータ移行しようとすると、冒頭のエラーが出てしまいます。
なので、仮想サーバーからエクスポートしたsqlファイルの中身に書かれている、
「utf8mb4_general_ci」を「utf8_general_ci」に
「utf8mb4」を「utf8」にテキストエディター等で置換する必要があります。
また、wp-config.php のデータベースの文字セットの設定(DB_CHARSET)が「utf8」のままであれば、SQL ファイル内の文字列置換だけでいけるようですが、
define(‘DB_CHARSET’, ‘utf8mb4’);
になっている場合は
define(‘DB_CHARSET’, ‘utf8‘);
に変更する必要があります。
それか、仮想サーバーのデータベースのデータをエクスポートする際に、
- 「エクスポート方法」を「詳細 – 可能なオプションをすべて表示」にチェックを入れる
- 「フォーマット特有のオプション」にて「他のデータベースシステムまたは古い MySQL サーバとの互換性:NONE」となっているところを「MYSQL40」に変更。
- で、他をいじらずにそのまま保存
もしくは、勝手にMySQLのルールをutf8からutf8mb4に変更させたくない場合は、wp-config.phpの中に「DO_NOT_UPGRADE_GLOBAL_TABLES」を記述するという方法もあります。
define('DO_NOT_UPGRADE_GLOBAL_TABLES', true);
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー