Перейти до вмісту
Інструменти

Пошук і заміна в 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

Наївний пошук і заміна в SQL у базі даних WordPress ламає кожну серіалізовану опцію, якої торкається, бо збережена довжина рядка більше не збігається. Інструмент генерує безпечні запити і пояснює, які саме — ні.

FAQ

Питання

Чи можна змінити URL мого сайту WordPress через SQL-пошук і заміну?

Не безпечно, і це найпоширеніша погана порада у світі WordPress. Багато опцій зберігаються як PHP-серіалізовані рядки, які записують власну довжину в байтах. Проста SQL-заміна змінює текст, але не довжину, тож PHP тихо не може десеріалізувати рядок, і значення просто зникає — забираючи з собою налаштування віджетів, модифікації шаблону й конфігурацію плагінів.

Що варто використати натомість?

WP-CLI: спершу 'wp search-replace old new --all-tables --dry-run', потім без --dry-run. Він розуміє серіалізацію й правильно переписує префікси довжини. Якщо доступу до CLI немає, плагін Better Search Replace робить те саме з адмінки.

Чи варто оновлювати стовпець GUID?

Ні. GUID — це постійний унікальний ідентифікатор запису, а не посилання, і читалки стрічок орієнтуються саме на нього. Його переписування змусить кожного підписника побачити кожен старий запис як абсолютно новий. Документація WordPress прямо каже не змінювати його.