Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie ändere ich die Sortierung aller Zeilen von latin1_swedish_ci in utf8_unicode_ci?

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.