Normalmente eu uso o manual find para substituir o texto em um banco de dados MySQL usando phpmyadmin. Agora estou cansado disso, como posso executar uma consulta para localizar e substituir um texto por um novo texto em toda a tabela no phpmyadmin?
Exemplo: encontre a palavra-chave domain.com
, substitua por www.domain.com
.
mysql
phpmyadmin
alyasabrina
fonte
fonte
Respostas:
Para uma
single table
atualizaçãoDe
multiple tables
-Se você deseja editar a partir de todas as tabelas, a melhor maneira é pegar oe
dump
depoisfind/replace
e enviá-lo de volta.fonte
If you want to edit from all tables, best way is to take the dump and then find/replace and upload it back.
Use sed no despejo para a find / substituir:sed "s:unwanted_text:wanted_text:g" dump.sql
A maneira mais fácil que encontrei é despejar o banco de dados em um arquivo de texto, executar um comando sed para fazer a substituição e recarregar o banco de dados no MySQL.
Todos os comandos abaixo são do bash no Linux.
Despejar banco de dados em arquivo de texto
Execute o comando sed para localizar / substituir a sequência de destino
Recarregue o banco de dados no MySQL
Mole-mole.
fonte
\/\/domain.com
sed -i
comando pode gerarunterminated substitute pattern
erros. Você pode usar em seused -i '' -e 's/oldString/newString/g' ./db.sql
lugar.Coloque isso em um arquivo php e execute-o e ele deve fazer o que você deseja que ele faça.
fonte
A execução de uma consulta SQL no PHPmyadmin para localizar e substituir o texto em todas as postagens do blog wordpress, como encontrar mysite.com/wordpress e substituí-la por mysite.com/news A tabela neste exemplo é tj_posts
fonte
wp_posts
assim que os olhares de consultaUPDATE `wp_posts` SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
Outra opção é gerar as instruções para cada coluna no banco de dados:
Isso deve gerar uma lista de instruções de atualização que você pode executar.
fonte
Por exemplo, se eu quiser substituir todas as ocorrências de John por Mark, usarei abaixo,
fonte
O phpMyAdmin inclui uma ferramenta de busca e substituição.
Selecione a tabela e clique em Pesquisar > Localizar e substituir
Essa consulta levou cerca de um minuto e substituiu com êxito vários milhares de instâncias
oldurl.ext
pelanewurl.ext
colunapost_content
O melhor deste método: você pode verificar todas as partidas antes de cometer.
NB estou usando o phpMyAdmin 4.9.0.1
fonte
Acredito que a resposta "swapnesh" seja a melhor! Infelizmente não consegui executá-lo no phpMyAdmin (4.5.0.2) que, apesar de ilógico (e tentou várias coisas), continuou dizendo que uma nova declaração foi encontrada e que nenhum delimitador foi encontrado…
Portanto, eu vim com a seguinte solução que pode ser útil se você tiver o mesmo problema e não tiver outro acesso ao banco de dados além do PMA…
Para testar o resultado esperado, você pode querer usar:
fonte
Se você acredita que nenhum dos campos a serem atualizados são serializados, as soluções acima funcionarão bem.
No entanto, se algum dos campos que precisar de atualização contiver dados serializados, uma Consulta SQL ou uma simples pesquisa / substituição em um arquivo de despejo, a serialização será interrompida (a menos que a cadeia substituída tenha exatamente o mesmo número de caracteres que a cadeia pesquisada).
Para ter certeza, um campo "serializado" se parece com isso:
O número de caracteres nos dados relevantes é codificado como parte dos dados.
A serialização é uma maneira de converter "objetos" em um formato facilmente armazenado em um banco de dados ou de transportar facilmente dados de objetos entre diferentes idiomas.
Aqui está uma explicação dos diferentes métodos usados para serializar dados de objetos, e por que você pode querer fazer isso, e aqui está uma postagem centrada no WordPress: Dados serializados, o que isso significa e por que é tão importante? em linguagem simples.
Seria incrível se o MySQL tivesse alguma ferramenta embutida para lidar com dados serializados automaticamente, mas não, e como existem diferentes formatos de serialização, não faria sentido fazê-lo.
wp-cli
Algumas das respostas acima pareciam específicas aos bancos de dados WordPress, que serializam muitos de seus dados. WordPress oferece uma ferramenta de linha de comando, wp procurar substituição , que faz alça de serialização.
Um comando básico seria:
No entanto, o WordPress enfatiza que
guid
nunca deve ser alterado , por isso recomenda pular essa coluna.Também sugere que muitas vezes você deseja pular a
wp_users
tabela.Aqui está como isso seria:
wp search-replace 'https://old-domain.com' 'https://shiney-new-domain.com' --skip-columns=guid --skip-tables=wp_users --dry-run
Nota: Adicionei o
--dry-run
sinalizador para que uma cópia e colagem não estrague automaticamente o banco de dados de ninguém. Depois de ter certeza de que o script faz o que você deseja, execute-o novamente sem esse sinalizador.Plug-ins
Se você estiver usando o WordPress, também existem muitos plug-ins gratuitos e comerciais disponíveis que oferecem uma interface GUI para fazer o mesmo, empacotados com muitos recursos adicionais.
Interconnect / it php script
Interconnect / oferece um script php para manipular dados serializados: Ferramenta Safe Search and Replace . Foi criado para uso em sites WordPress, mas parece que pode ser usado em qualquer banco de dados serializado por PHP.
Muitas empresas, incluindo o próprio WordPress, recomendam esta ferramenta. Instruções aqui, cerca de 3/4 da página.
fonte
o melhor é exportá-lo como arquivo sql e abri-lo com um editor, como o código do visual studio, e encontre e repalace suas palavras. Eu substituo no arquivo de 1 gig sql em 1 minuto por 16 palavras que total é 14600 palavra. é o melhor caminho. e depois de substituí-lo, salve e importe-o novamente. não se esqueça de compactá-lo com zip para importação.
fonte
Gere consultas SQL de alteração (FAST)
mysql -e "SELECT CONCAT ('atualização', nome_tabela, 'conjunto', nome_da_coluna, '= substituir (', nome_coluna, ',' 'www.oldsite.com' ',' 'www.newsite.com' '); ') Instrução AS FROM information_schema.columns WHERE nome_tabela COMO' wp_% '"-u raiz -p seu_db_name_aqui> upgrade_script.sql
Remova qualquer lixo no início do arquivo. Eu tive alguns.
nano upgrade_script.sql
Execute o script gerado com as opções --force para ignorar erros. (LENTO - pegue um café se for grande)
mysql -u raiz -p seu_db_name_aqui --force <upgrade_script.sql
fonte
No caso de frases com letras maiúsculas e minúsculas, podemos usar BINARY REPACE
fonte