WordPress の投稿画面で 😭 や 🤔 等の顔文字を使うことってありますよね。
それに 👍 や ✅ 等、他にも絵文字を使うことがありますが、先日、とある WordPress の投稿画面でこのような絵文字が原因で投稿が保存できないという状況に遭遇しました。
投稿が保存できない時に表示されたエラーメッセージは以下のような内容です。
更新に失敗しました。データベース内の投稿を更新できませんでした。
エラー原因は絵文字や特殊文字か
エラーメッセージのまま Google にて調べてみると、WordPress で絵文字や特殊文字を利用している場合に「更新に失敗しました。 データベース内の投稿を更新できませんでした。」のエラーが出ると伝えている記事をいくつか見かけました。
このエラーが出た私の WordPress の記事でも、確かに絵文字を利用していましたので、試しに絵文字を一旦削除してから保存すると、エラーはなくなり、そのまま保存されました。
絵文字を削除で解決、と言いたいところですが、このエラーが表示された WordPress は、エックスサーバーからカラフルボックスに移行した経緯があります。
そして、移行前のエックスサーバーでは特に問題なく絵文字の更新もできていました。
そのため、絵文字を削除して解決ではなく、何か解決策があるはずです。
WordPress 移行前と移行後のデータベースの照合順序が違う
解決策について調査を進めていくと、データベースの照合順序を utf8mb4_general_ci にすると解決する可能性がある、という情報が私には引っかかりましたので、WordPress 移行前と移行後のそれぞれの環境の照合順序を確認してみることにしました。
まずは WordPress 移行後のカラフルボックスの phpMyAdmin にログインして該当のデータベースを開き、画面上のメニューから「操作」を押下、開いた画面の「照合順序」を確認してみると utf8mb3_general_ci と表示されていました。
加えて wp_posts テーブル等の構造も同様に utf8mb3_general_ci と表示されていることを確認しました。
次に WordPress 移行前のエックスサーバーの phpMyAdmin にログインして、同様にデータベースの照合順序を確認してみたところ、utf8_general_ci と表示されていました。
それぞれ確認してみると、移行前と移行後でデータベースの照合順序に違いがあることに気が付きましたが、カラフルボックスにデータベースをインポートする際に(気付かず) utf8mb3_general_ci に変換してしまっていたのでしょう。自分のミスが発覚した瞬間でもありました。
データベースの照合順序については、エックスサーバーの設定 utf8_general_ci でも動作していたことを思うと、サーバーの設定?によっては必ずしも utf8mb4_general_ci でなければならないというわけでもなさそう?
ですが、カラフルボックスでは utf8mb4_general_ci が選択肢としてありましたので、調べた通り utf8mb4_general_ci に設定を変更してみました。
データベースの照合順序の修正でエラーが解消
データベースの照合順序を変更することでエラーの解消が見込めそうな気がしましたので、データベースのバックアップを取り、照合順序を変更してみることにしました。
データベースの照合順序の変更手順は以下の通り。
- phpMyAdmin にログイン
- 該当のデータベースを開き、画面上の操作を押下
- 照合順序を utf8mb4_general_ci に変更
照合順序を変更する際、
すべてのテーブルの照合順序を変更
すべてのテーブルのカラム照合順序を変更する
これらはチェックして実行しました。
※ 絵文字や特殊文字を使う場面が限られている場合は、この場所から実行するのではなく、wp_posts テーブル等の構造(またはコマンドライン)から照合順序を変更するという方法がよいかもしれません。
データベースの照合順序を変更後、WordPress の記事に戻り、絵文字が入った状態で保存を押してみたところ、エラーが出ることはなく、保存して公開することができました。
あとがき
今回のエラーに遭遇し、データベースの照合順序について調べる機会となりましたが、utf8mb3_general_ci utf8mb4_general_ci と調べて、utf8mb3_general_ci は 1 〜 3バイトの文字を扱え、utf8mb4_general_ci は 1 〜 4バイトの文字を扱えること、絵文字は4バイト文字となるため utf8mb4_general_ci で扱える、ということがわかりました。
このことから、utf8mb3_general_ci とセットされてしまっていた移行後の環境では、エラーが発生していたことも納得しました。
データベースを違う環境にインポートする場合は、データベースの照合順序についてもちゃんと確認しておこなうようにしようと、そう学ぶ機会にもなりました。
最後に、エックスサーバーからカラフルボックスに移行した、と実例を出して記載しましたが、どちらかの環境が原因とかそういう話ではありません。あくまでも私の移行の仕方の問題です。悪しからずご了承くださいませ。
同じような環境の方の参考になりましたら幸いです。
コメント