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.

A alteração

Leia isto antes de executar qualquer coisa

O WordPress armazena muitas opções como strings PHP-serialized, e uma string serializada registra o próprio comprimento em bytes — s:19:"http://old-site.com". Uma substituição SQL simples altera o texto, mas não o comprimento, então o PHP não consegue mais desserializar a linha. Isso não gera erro. O valor simplesmente fica vazio, sem aviso.

O que você perde: configuração de widgets, ajustes do tema e a maioria das configurações de plugins. Geralmente você só percebe dias depois, e a essa altura o backup que você teria restaurado também já se foi.

É por isso que as consultas abaixo deliberadamente não tocam em wp_options.

O que você está movendo?
search-replace.sql

Faça um backup do banco de dados primeiro. Não "pense em fazer um" — faça um. Não há como desfazer um 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.

Perguntas frequentes

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.