本文へスキップ
ツール

検索・置換 SQL

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

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

変更内容

実行する前に、必ずお読みください

WordPress は多くのオプションを PHP-serialized 文字列として保存しており、シリアライズされた文字列は自身のバイト長を記録します — s:19:"http://old-site.com"。単純な SQL の置換ではテキストは変わってもバイト長は変わらないため、PHP はその行をアンシリアライズできなくなります。エラーは出ません。値は何も告げずに空になるだけです。

失われるもの: ウィジェットの設定、テーマのカスタマイズ内容、そしてほとんどのプラグイン設定です。たいていは数日経つまで気づかず、その頃には復元に使えたはずのバックアップもすでになくなっています。

だからこそ、下のクエリは意図的に wp_options に触れないようにしています。

何を移行しますか?
search-replace.sql

先にデータベースのバックアップを取ってください。「取ることを検討する」ではなく、必ず取ってください。UPDATE に取り消し(undo)はありません。

検索・置換 SQL について

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

よくある質問

よくある質問

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 の公式ドキュメントは、これを変更しないよう明確に述べています。