Wenn die Spalten den Standardtabellenzeichensatz verwenden, muss nur eine Abfrage pro Tabelle konvertiert werden:
ALTER TABLE t CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Wenn der Zeichensatz für jede Spalte einzeln festgelegt wird, gibt es AFAIK keine Möglichkeit, dies für alle Spalten aller Tabellen in der Datenbank direkt in MySql zu tun, aber Sie könnten ein kleines Programm in der Sprache Ihrer Wahl schreiben, das dies tut.
Ihr Programm würde die INFORMATION_SCHEMA.COLUMNS
Tabelle und sehen Sie sich den CHARACTER_SET_NAME
an Spalte:
SELECT * FROM `INFORMATION_SCHEMA.COLUMNS`
WHERE TABLE_SCHEMA = 'dbname' AND CHARACTER_SET_NAME = 'latin1'
Für jede Ergebniszeile ist es trivial, eine ALTER TABLE
zu synthetisieren und auszuführen Abfrage an Ort und Stelle, die den Zeichensatz und die Sortierung entsprechend ändert:
ALTER TABLE t MODIFY col TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
In der obigen Abfrage t
, col
und TEXT
wären die Werte von TABLE_NAME
, COLUMN_NAME
und DATA_TYPE
Spalten aus INFORMATION_SCHEMA.COLUMNS
Ergebnismenge.