Normalerweise verwende ich die manuelle Suche, um Text in einer MySQL-Datenbank mit phpmyadmin zu ersetzen. Ich habe es jetzt satt, wie kann ich eine Abfrage ausführen, um einen Text in der gesamten Tabelle in phpmyadmin zu finden und durch neuen Text zu ersetzen?
Beispiel: Schlüsselwort suchen domain.com
, durch ersetzen www.domain.com
.
mysql
phpmyadmin
alyasabrina
quelle
quelle
Antworten:
Für ein
single table
UpdateVon
multiple tables
-Wenn Sie aus allen Tabellen bearbeiten möchten, nehmen Sie am besten das
dump
und dannfind/replace
und laden Sie es zurück.quelle
If you want to edit from all tables, best way is to take the dump and then find/replace and upload it back.
Verwenden Sie sed auf der Müllkippe für das Finden / Ersetzen:sed "s:unwanted_text:wanted_text:g" dump.sql
Der einfachste Weg, den ich gefunden habe, besteht darin, die Datenbank in eine Textdatei zu kopieren, einen sed-Befehl auszuführen, um das Ersetzen durchzuführen, und die Datenbank wieder in MySQL zu laden.
Alle folgenden Befehle sind Bash unter Linux.
Datenbank in Textdatei sichern
Führen Sie den Befehl sed aus, um die Zielzeichenfolge zu finden / ersetzen
Laden Sie die Datenbank neu in MySQL
Kinderleicht.
quelle
\/\/domain.com
sed -i
Befehl in OS X möglicherweise einenunterminated substitute pattern
Fehler auslöst. Sie könnensed -i '' -e 's/oldString/newString/g' ./db.sql
stattdessen verwenden.Legen Sie dies in eine PHP-Datei und führen Sie es aus und es sollte tun, was Sie wollen, dass es tun soll.
quelle
Das Ausführen einer SQL-Abfrage in PHPmyadmin zum Suchen und Ersetzen von Text in allen WordPress-Blog-Posts, z. B. das Suchen von mysite.com/wordpress und das Ersetzen durch mysite.com/news Die Tabelle in diesem Beispiel lautet tj_posts
quelle
wp_posts
so, dass die Abfrage aussiehtUPDATE `wp_posts` SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
Eine andere Möglichkeit besteht darin, die Anweisungen für jede Spalte in der Datenbank zu generieren:
Dies sollte eine Liste von Aktualisierungsanweisungen generieren, die Sie dann ausführen können.
quelle
Wie zum Beispiel, wenn ich alle Vorkommen von John durch Mark ersetzen möchte, werde ich unten verwenden,
quelle
phpMyAdmin enthält ein übersichtliches Tool zum Suchen und Ersetzen.
Wählen Sie die Tabelle aus und klicken Sie auf Suchen > Suchen und Ersetzen
Diese Abfrage dauerte etwa eine Minute und erfolgreich ersetzt mehrere tausend Instanzen
oldurl.ext
mit demnewurl.ext
in Spaltepost_content
Das Beste an dieser Methode: Sie können jedes Spiel vor dem Festschreiben überprüfen.
NB Ich verwende phpMyAdmin 4.9.0.1
quelle
Ich glaube, "swapnesh" Antwort ist die beste! Leider konnte ich es nicht in phpMyAdmin (4.5.0.2) ausführen, der, obwohl unlogisch (und verschiedene Dinge ausprobiert), immer wieder sagte, dass eine neue Anweisung gefunden wurde und kein Trennzeichen gefunden wurde…
Daher kam ich mit der folgenden Lösung, die nützlich sein könnte, wenn Sie dasselbe Problem haben und keinen anderen Zugriff auf die Datenbank als PMA haben…
Um das erwartete Ergebnis zu testen, möchten Sie möglicherweise Folgendes verwenden:
quelle
Wenn Sie sicher sind, dass keines der zu aktualisierenden Felder serialisiert ist, funktionieren die oben genannten Lösungen gut.
Wenn jedoch eines der Felder, die aktualisiert werden müssen, serialisierte Daten enthält, wird die Serialisierung durch eine SQL-Abfrage oder ein einfaches Suchen / Ersetzen in einer Speicherauszugsdatei unterbrochen (es sei denn, die ersetzte Zeichenfolge enthält genau die gleiche Anzahl von Zeichen wie die gesuchte Zeichenfolge).
Ein "serialisiertes" Feld sieht allerdings folgendermaßen aus:
Die Anzahl der Zeichen in den relevanten Daten wird als Teil der Daten codiert.
Die Serialisierung ist eine Möglichkeit, "Objekte" in ein Format zu konvertieren, das leicht in einer Datenbank gespeichert werden kann, oder Objektdaten einfach zwischen verschiedenen Sprachen zu transportieren.
Hier finden Sie eine Erklärung der verschiedenen Methoden zum Serialisieren von Objektdaten und warum Sie dies möglicherweise möchten. Hier finden Sie einen WordPress-zentrierten Beitrag: Serialisierte Daten, was bedeutet das und warum ist es so wichtig? im Klartext.
Es wäre erstaunlich, wenn MySQL ein eingebautes Tool hätte, um serialisierte Daten automatisch zu verarbeiten, aber dies ist nicht der Fall, und da es verschiedene Serialisierungsformate gibt, wäre es nicht einmal sinnvoll, dies zu tun.
wp-cli
Einige der obigen Antworten schienen spezifisch für WordPress-Datenbanken zu sein, die einen Großteil ihrer Daten serialisieren. WordPress bietet ein Kommandozeilen-Tool, wp search-replace , das die Serialisierung übernimmt .
Ein grundlegender Befehl wäre:
WordPress betont jedoch, dass das
guid
niemals geändert werden sollte , daher empfiehlt es, diese Spalte zu überspringen.Es wird auch empfohlen, dass Sie häufig die
wp_users
Tabelle überspringen möchten .So würde das aussehen:
wp search-replace 'https://old-domain.com' 'https://shiney-new-domain.com' --skip-columns=guid --skip-tables=wp_users --dry-run
Hinweis: Ich habe das
--dry-run
Flag hinzugefügt, damit durch das Kopieren und Einfügen nicht automatisch die Datenbank von Personen zerstört wird. Wenn Sie sicher sind, dass das Skript das tut, was Sie wollen, führen Sie es erneut ohne dieses Flag aus.Plugins
Wenn Sie WordPress verwenden, gibt es auch viele kostenlose und kommerzielle Plugins, die eine GUI-Schnittstelle bieten, um dasselbe zu tun, gepackt mit vielen zusätzlichen Funktionen.
Interconnect / it-PHP-Skript
Interconnect / it bietet ein PHP-Skript für die Verarbeitung serialisierter Daten: Tool zum sicheren Suchen und Ersetzen . Es wurde für die Verwendung auf WordPress-Sites erstellt, kann aber anscheinend in jeder von PHP serialisierten Datenbank verwendet werden.
Viele Unternehmen, einschließlich WordPress selbst, empfehlen dieses Tool. Anleitung hier, ca. 3/4 auf der Seite.
quelle
Am besten exportieren Sie es als SQL-Datei und öffnen es mit einem Editor wie Visual Studio-Code, um Ihre Wörter zu finden und neu zu formulieren. Ich ersetze in 1 Gig-Datei SQL in 1 Minuten für 16 Wörter, die insgesamt 14600 Wort ist. Es ist der beste Weg. und nach dem Ersetzen speichern und erneut importieren. Vergessen Sie nicht, es für den Import mit zip zu komprimieren.
quelle
Generieren Sie Änderungs-SQL-Abfragen (SCHNELL)
mysql -e "SELECT CONCAT ('update', tabellenname, 'set', spaltenname, '= replace (', spaltenname, ',' 'www.oldsite.com' ',' 'www.newsite.com' '); ') AS-Anweisung FROM information_schema.columns WHERE Tabellenname LIKE' wp_% '"-u root -p your_db_name_here> upgrade_script.sql
Entfernen Sie den Müll am Anfang der Datei. Ich hatte einige.
nano upgrade_script.sql
Führen Sie das generierte Skript mit den Optionen --force aus, um Fehler zu überspringen. (LANGSAM - Kaffee trinken, wenn große DB)
mysql -u root -p your_db_name_here --force <upgrade_script.sql
quelle
Bei Sätzen mit Groß- und Kleinbuchstaben können wir BINARY REPACE verwenden
quelle