Ändern Sie alle Tabellen in einer Datenbank mit einem einzigen Befehl


13

Gibt es einen einzelnen oder einen einzeiligen Befehl zum Ändern aller Tabellen in einer Datenbank? Ich möchte diesen Befehl in jeder Tabelle innerhalb einer Datenbank ausgeben:

ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8;

Mein Ziel ist es, den Zeichensatz von latin1 auf utf8 für alle Tabellen zu ändern.

UPDATE: RDBMS ist MySQL

Antworten:


18

Nein, es gibt keinen solchen Befehl. Sie können jedoch eine kurze Abfrage schreiben, um die SQL für Sie wie folgt zu generieren:

USE INFORMATION_SCHEMA;
SELECT 
CONCAT("ALTER TABLE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` CONVERT TO CHARACTER SET UTF8;") 
AS MySQLCMD FROM TABLES 
WHERE TABLE_SCHEMA = "your_schema_goes_here";

Dann können Sie die Ausgabe von diesem ausführen, um das zu tun, was Sie benötigen.

Quellen:

http://forums.mysql.com/read.php?20,244395,244421#msg-244421


Nein, es gibt keine Möglichkeit, mit einem einzigen Befehl das zu tun, was Sie wollen.
Mr. Brownstone

Damit dies unter MariaDB funktioniert, musste ich aus irgendeinem Grund WHERE TABLE_SCHEMA = "your_schema_goes_here"den Befehl out auslassen.
Gwyneth Llewelyn

2

Einfachster Weg: Exportieren Sie die Datenbank. Öffnen Sie die exportierte Datenbank in einem Texteditor und führen Sie ein Suchen / Ersetzen mit "UTF8" oder was auch immer durch. Importieren Sie die geänderte Datenbank erneut.


1
Warum ist das der einfachste Weg? Was ist, wenn Sie Ihre DB nicht herunterfahren können, um den Zeichensatz zu ändern?
Dezso

Weil es keine SQL-Kenntnisse erfordert. Wenn Sie die Datenbank nicht exportieren können, ist dies natürlich kein Problem, und diese Methode ist irrelevant. Wenn Sie jedoch über die erforderlichen Berechtigungen verfügen, um die Datenbank direkt zu bearbeiten, können Sie sie höchstwahrscheinlich auch exportieren.
Andrew Smith

Dies war die beste Lösung in meinem Fall! Eine schnelle Lösung, die ziemlich praktisch war. Ich habe in meiner lokalen Datenbank gearbeitet, als ich aus irgendeinem Grund den Fehler "Ungültige Sortierfolgenmischung" in meiner Datenbank bemerkte. +1.
Evl183

1

Wenn Sie mit MS SQL Server arbeiten, gibt es eine undokumentierte gespeicherte Prozedur ms_foreachtable, die Sie verwenden können. Verwenden Sie, um den Tabellennamen durch ein? Zu ersetzen. in der Aussage.

Also in deinem Beispiel

EXEC ms_foreachtable 'ALTER TABLE [?] .....'

Dieser Artikel beschreibt, wie man ms_foreachtable in MYSQL hat. MYSQL CLONE OF SP_MSFOREACHTABLE
Maryam Arshi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.