本文へスキップ
ツール

検索・置換 SQL

シリアライズされたデータを壊さずにサイト URL を変更

ブラウザ内で動きます。何もアップロードされません。

The change

Read this before you run anything

WordPress stores many options as PHP-serialized strings, and a serialized string records its own byte length — s:19:"http://old-site.com". A plain SQL replace changes the text but not the length, so PHP can no longer unserialize the row. It does not error. The value just silently becomes empty.

What you lose: widget configuration, theme mods, and most plugin settings. Usually you do not notice until days later, and by then the backup you would have restored is gone too.

This is why the queries below deliberately do not touch wp_options.

What are you moving?
search-replace.sql

Take a database backup first. Not 'consider taking one' — take one. There is no undo for an UPDATE.

検索・置換 SQL について

WordPress データベースに対する単純な SQL の検索・置換は、保存された文字列の長さが一致しなくなるため、触れたシリアライズ済みのオプションをすべて壊してしまいます。安全なクエリを生成し、どれが安全でないかを正確に説明します。

FAQ

よくある質問

SQL の検索置換で WordPress のサイト URL を変更できますか?

安全にはできません。そしてこれは WordPress で最も多く共有される悪いアドバイスです。多くのオプションは自身のバイト長を記録した PHP のシリアライズ文字列として保存されています。単純な SQL 置換ではテキストは変わっても長さは変わらないので、PHP はその行のデシリアライズに黙って失敗し、値はそのまま消えてしまいます。ウィジェット設定、テーマの変更、プラグインの設定もろとも失われます。

代わりに何を使うべきですか?

WP-CLI です。まず「wp search-replace old new --all-tables --dry-run」を実行し、それから --dry-run なしで実行します。これはシリアライズを理解し、長さの接頭辞を正しく書き換えます。CLI にアクセスできない場合は、Better Search Replace プラグインが管理画面から同じことをしてくれます。

GUID カラムも更新すべきですか?

いいえ。GUID は投稿の恒久的な一意の識別子であってリンクではなく、フィードリーダーはこれを鍵として使います。書き換えると、すべての購読者が古い投稿をすべて新着として見ることになります。WordPress の公式ドキュメントは、これを変更しないよう明確に述べています。