Als de kolommen de standaard tabeltekenset gebruiken, hoeft u slechts één query per tabel te converteren:
ALTER TABLE t CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Als de tekenset voor elke kolom afzonderlijk is ingesteld, AFAIK, is er geen manier om dat op alle kolommen van alle tabellen in de database rechtstreeks in MySql te doen, maar je zou een klein programma kunnen schrijven in de taal van je keuze die dit wel doet.
Uw programma zou de INFORMATION_SCHEMA.COLUMNS
tabel en kijk naar de CHARACTER_SET_NAME
kolom:
SELECT * FROM `INFORMATION_SCHEMA.COLUMNS`
WHERE TABLE_SCHEMA = 'dbname' AND CHARACTER_SET_NAME = 'latin1'
Voor elke resultaatrij is het triviaal om een ALTER TABLE
te synthetiseren en uit te voeren vraag ter plaatse die de tekenset en sortering op de juiste manier verandert:
ALTER TABLE t MODIFY col TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
In de bovenstaande zoekopdracht t
, col
en TEXT
zouden de waarden zijn van de TABLE_NAME
, COLUMN_NAME
en DATA_TYPE
kolommen uit de INFORMATION_SCHEMA.COLUMNS
resultatenset.