Habituellement, j'utilise la recherche manuelle pour remplacer le texte dans une base de données MySQL en utilisant phpmyadmin. J'en ai marre maintenant, comment puis-je exécuter une requête pour trouver et remplacer un texte par du nouveau texte dans la table entière dans phpmyadmin?
Exemple: rechercher un mot domain.com
- clé , remplacer par www.domain.com
.
mysql
phpmyadmin
alyasabrina
la source
la source
Réponses:
Pour une
single table
mise à jourDe
multiple tables
-Si vous souhaitez modifier à partir de toutes les tables, la meilleure façon est de prendre le
dump
puis de lefind/replace
télécharger.la source
If you want to edit from all tables, best way is to take the dump and then find/replace and upload it back.
Utilisez sed sur la décharge pour la recherche / remplacement:sed "s:unwanted_text:wanted_text:g" dump.sql
Le moyen le plus simple que j'ai trouvé est de vider la base de données dans un fichier texte, d'exécuter une commande sed pour effectuer le remplacement et de recharger la base de données dans MySQL.
Toutes les commandes ci-dessous sont bash sous Linux.
Vider la base de données dans un fichier texte
Exécutez la commande sed pour rechercher / remplacer la chaîne cible
Recharger la base de données dans MySQL
Peasy facile.
la source
\/\/domain.com
sed -i
commande peut rejeter uneunterminated substitute pattern
erreur. Vous pouvez utiliser à lased -i '' -e 's/oldString/newString/g' ./db.sql
place.Mettez-le dans un fichier php et exécutez-le et il devrait faire ce que vous voulez qu'il fasse.
la source
Exécuter une requête SQL dans PHPmyadmin pour rechercher et remplacer du texte dans tous les articles de blog wordpress, comme trouver mysite.com/wordpress et le remplacer par mysite.com/news La table dans cet exemple est tj_posts
la source
wp_posts
ainsi la requête ressembleUPDATE `wp_posts` SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
Une autre option consiste à générer les instructions pour chaque colonne de la base de données:
Cela devrait générer une liste d'instructions de mise à jour que vous pouvez ensuite exécuter.
la source
Comme par exemple, si je veux remplacer toutes les occurrences de John par Mark que j'utiliserai ci-dessous,
la source
phpMyAdmin inclut un outil de recherche et de remplacement soigné.
Sélectionnez le tableau, puis appuyez sur Rechercher > Rechercher et remplacer
Cette requête a pris environ une minute et a réussi à remplacer plusieurs milliers d'instances de
oldurl.ext
lanewurl.ext
colonne danspost_content
La meilleure chose à propos de cette méthode: vous pouvez vérifier chaque match avant de vous engager.
NB J'utilise phpMyAdmin 4.9.0.1
la source
Je crois que la réponse "swapnesh" est la meilleure! Malheureusement, je n'ai pas pu l'exécuter dans phpMyAdmin (4.5.0.2) qui, bien qu'illogique (et a essayé plusieurs choses), a continué à dire qu'une nouvelle déclaration avait été trouvée et qu'aucun délimiteur n'avait été trouvé…
Je suis donc venu avec la solution suivante qui pourrait être utile si vous rencontrez le même problème et n'avez pas d'autre accès à la base de données que PMA…
Pour tester le résultat attendu, vous pouvez utiliser:
la source
Si vous êtes certain qu'aucun des champs à mettre à jour n'est sérialisé, les solutions ci-dessus fonctionneront bien.
Cependant, si l'un des champs devant être mis à jour contient des données sérialisées, une requête SQL ou une simple recherche / remplacement sur un fichier de vidage interrompra la sérialisation (sauf si la chaîne remplacée a exactement le même nombre de caractères que la chaîne recherchée).
Pour être sûr, un champ "sérialisé" ressemble à ceci:
Le nombre de caractères dans les données pertinentes est codé dans le cadre des données.
La sérialisation est un moyen de convertir des "objets" dans un format facilement stocké dans une base de données, ou de transporter facilement des données d'objet entre différentes langues.
Voici une explication des différentes méthodes utilisées pour sérialiser les données d'objet, et pourquoi vous pouvez le faire, et voici un article centré sur WordPress: Données sérialisées, qu'est-ce que cela signifie et pourquoi est-ce si important? en langage simple.
Ce serait étonnant si MySQL avait un outil intégré pour gérer automatiquement les données sérialisées, mais ce n'est pas le cas, et comme il existe différents formats de sérialisation, cela n'aurait même pas de sens de le faire.
wp-cli
Certaines des réponses ci-dessus semblaient spécifiques aux bases de données WordPress, qui sérialisent une grande partie de ses données. WordPress offre un outil de ligne de commande, wp recherche-remplacement , qui ne sérialisation poignée.
Une commande de base serait:
Cependant, WordPress souligne que le
guid
ne doit jamais être modifié , il recommande donc de sauter cette colonne.Cela suggère également que souvent vous voudrez sauter la
wp_users
table.Voici à quoi cela ressemblerait:
wp search-replace 'https://old-domain.com' 'https://shiney-new-domain.com' --skip-columns=guid --skip-tables=wp_users --dry-run
Remarque: J'ai ajouté le
--dry-run
drapeau afin qu'un copier-coller ne ruine pas automatiquement la base de données de quiconque. Une fois que vous êtes sûr que le script fait ce que vous voulez, exécutez-le à nouveau sans cet indicateur.Plugins
Si vous utilisez WordPress, il existe également de nombreux plugins gratuits et commerciaux qui offrent une interface graphique pour faire de même, emballés avec de nombreuses fonctionnalités supplémentaires.
Interconnect / it script php
Interconnect / it propose un script php pour gérer les données sérialisées: outil Safe Search and Replace . Il a été créé pour être utilisé sur les sites WordPress, mais il semble qu'il puisse être utilisé sur n'importe quelle base de données sérialisée par PHP.
De nombreuses entreprises, dont WordPress lui-même, recommandent cet outil. Instructions ici, environ 3/4 en bas de la page.
la source
mieux vous l'exportez en tant que fichier sql et l'ouvrez avec un éditeur tel que le code Visual Studio et trouvez et remplacez vos mots. je remplace dans 1 gigl de fichier sql en 1 minutes pour 16 mots ce total est 14600 mot. c'est la meilleure façon. et après le remplacer, enregistrez-le et importez-le à nouveau. n'oubliez pas de le compresser avec zip pour l'import.
la source
Générer des requêtes SQL de changement (FAST)
mysql -e "SELECT CONCAT ('update', table_name, 'set', column_name, '= replace (', column_name, ',' 'www.oldsite.com' ',' 'www.newsite.com' '); ') Instruction AS FROM information_schema.columns WHERE table_name LIKE' wp_% '"-u root -p your_db_name_here> upgrade_script.sql
Supprimez tous les déchets au début du fichier. J'en avais.
nano upgrade_script.sql
Exécutez le script généré avec les options --force pour ignorer les erreurs. (LENT - prenez un café si gros DB)
mysql -u root -p votre_nom_db_here --force <upgrade_script.sql
la source
Dans le cas de phrases avec majuscules - minuscules, nous pouvons utiliser BINARY REPACE
la source