Pular para o conteúdo
Ferramentas

SQL de busca e substituição

Mude a URL do seu site sem corromper dados serializados

Roda no seu navegador. Nada é enviado.

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.

Sobre o SQL de busca e substituição

Uma busca e substituição SQL ingênua em um banco de dados WordPress quebra toda opção serializada que toca, porque o comprimento da string armazenada deixa de corresponder. Isto gera as consultas que são seguras e explica exatamente quais não são.

FAQ

Perguntas

Posso mudar a URL do meu site WordPress com um find and replace no SQL?

Não com segurança, e este é o conselho ruim mais compartilhado no WordPress. Muitas opções são armazenadas como strings serializadas do PHP que registram o próprio comprimento em bytes. Um replace SQL simples muda o texto mas não o comprimento, então o PHP falha silenciosamente ao desserializar a linha e o valor simplesmente desaparece — levando junto configurações de widgets, mods de tema e configuração de plugins.

O que devo usar no lugar?

WP-CLI: 'wp search-replace old new --all-tables --dry-run' primeiro, depois sem o --dry-run. Ele entende a serialização e reescreve os prefixos de comprimento corretamente. Se você não tem acesso à CLI, o plugin Better Search Replace faz a mesma coisa pelo admin.

Devo atualizar a coluna GUID?

Não. O GUID é um identificador único permanente de um post, não um link, e os leitores de feed se baseiam nele. Reescrevê-lo faz cada assinante ver cada post antigo como novinho em folha. A documentação do WordPress diz explicitamente para não mudá-lo.