WordPressで既存の記事を更新する際に「更新に失敗しました。データベース内の投稿を更新できませんでした。」と表示されて更新できなくなりました。
今回は上記エラーが表示され、記事を更新できない場合の対応方法を解説します。
- 更新に失敗しました。データベース内の投稿を更新できませんでした。の対応方法
- 上記エラーの原因
結論から先に申し上げますと、「機種依存文字」もしくは「絵文字」が原因の可能性が高いです。
確認する内容
「その他の記事以外は更新できるか?」「更新できない記事に絵文字は使われてないか?」をまず確認してください。
その他の記事では更新できて、特定の記事だけ「更新に失敗しました。データベース内の投稿を更新できませんでした。」と表示され更新されないのであれば、絵文字や機種依存文字が原因の可能性が極めて高いです。
😀 😱 🔰 ⭕️ ㍑ ㌔ ㌫ ㌢
対処方法
単純に絵文字や機種依存文字をなくせば更新は可能なのですが、本記事で掲載できているように、データベースの設定を変更することで利用することはできます。
今まで利用できていて突然利用できなくなった場合は、直近でサーバー移転などをしてないでしょうか?DBをバックアップからrestoreしたタイミングで照合順序が変わった可能性があります。
phpMyAdminもしくはmysqlコマンドで照合順序を確認します。
SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME = 'データベース名';
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)モードになっていると、カラムのサイズ制限を超えた場合エラーを出す場合があります。
こちらの変更については注意すべき点がありますので、ここでの言及は避けます。