広告:ページ内にてアフィリエイト広告を利用しています。
WordPress

WordPressで「更新に失敗しました」と表示されるときの対処法

更新に失敗しました。データベース内の投稿を更新できませんでした。

WordPressで既存の記事を更新する際に「更新に失敗しました。データベース内の投稿を更新できませんでした。」と表示されて更新できなくなりました。

今回は上記エラーが表示され、記事を更新できない場合の対応方法を解説します。

この記事でわかること
  • 更新に失敗しました。データベース内の投稿を更新できませんでした。の対応方法
  • 上記エラーの原因

結論から先に申し上げますと、「機種依存文字」もしくは「絵文字」が原因の可能性が高いです。

確認する内容

「その他の記事以外は更新できるか?」「更新できない記事に絵文字は使われてないか?」をまず確認してください。

その他の記事では更新できて、特定の記事だけ「更新に失敗しました。データベース内の投稿を更新できませんでした。」と表示され更新されないのであれば、絵文字や機種依存文字が原因の可能性が極めて高いです。

絵文字や機種依存文字の例

😀 😱 🔰 ⭕️ ㍑ ㌔ ㌫ ㌢

対処方法

単純に絵文字や機種依存文字をなくせば更新は可能なのですが、本記事で掲載できているように、データベースの設定を変更することで利用することはできます。

今まで利用できていて突然利用できなくなった場合は、直近でサーバー移転などをしてないでしょうか?DBをバックアップからrestoreしたタイミングで照合順序が変わった可能性があります。

phpMyAdminもしくはmysqlコマンドで照合順序を確認します。

wp_postがutf8mb3やutf8_general_ciなどになっていると思います。絵文字を扱うにはutf8mb4に変更する必要があります。

phpMyAdminでの変更

対象のテーブルの[構造] を開き、対象のフィールドの[編集] -> [照合順序]をutf8mbr_unicodeに変更。保存するで変更されます。

変更する際はあらかじめバックアップを取るようにしてください。

mysqlコマンドでの変更方法

wp_postsのpost_contentとpost_titleを変更する想定です。

ALTER TABLE wp_posts 
MODIFY COLUMN post_content TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
MODIFY COLUMN post_title TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

もし、ERROR 1406 (22001): Data too long for column ‘post_content’というエラーがでた際は文字セットの変更によって 最大バイト数を超えたためのエラーです。

その場合はフィールドをTEXTからmediumtextに変更して回避します。

ALTER TABLE wp_posts 
MODIFY COLUMN post_content MEDIUMTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
MODIFY COLUMN post_content_filtered MEDIUMTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

最後に

照合順序の変更操作をすることで、記事の更新ができるようになると思います。

なお、STRICT (sql_mode)モードになっていると、カラムのサイズ制限を超えた場合エラーを出す場合があります。

こちらの変更については注意すべき点がありますので、ここでの言及は避けます。

はじめてのVPSにさくらVPS
レンタルサーバーより高い自由度が魅力

政府クラウドの提供事業者である「さくらインターネット」のさくらのVPSは24時間365日の有人監視のセキュリティ体制が整っており、月額535円から始められます!

レンタルサーバーより自由度の高いサーバーを始めるならぜひお試しください♪

\2週間の無料お試しあり/

さくらVPSをチェック