Se le colonne utilizzano il set di caratteri tabella predefinito, è solo una query per tabella da convertire:
ALTER TABLE t CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Se il set di caratteri è impostato individualmente su ciascuna colonna, AFAIK non c'è modo di farlo su tutte le colonne di tutte le tabelle nel database direttamente in MySql, ma potresti scrivere un piccolo programma nella tua lingua preferita che lo fa.
Il tuo programma interrogherà INFORMATION_SCHEMA.COLUMNS
tabella e guarda il CHARACTER_SET_NAME
colonna:
SELECT * FROM `INFORMATION_SCHEMA.COLUMNS`
WHERE TABLE_SCHEMA = 'dbname' AND CHARACTER_SET_NAME = 'latin1'
Per ogni riga di risultato è banale sintetizzare ed eseguire un ALTER TABLE
query sul posto che modifichi il set di caratteri e le regole di confronto in modo appropriato:
ALTER TABLE t MODIFY col TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Nella query precedente t
, col
e TEXT
sarebbero i valori di TABLE_NAME
, COLUMN_NAME
e DATA_TYPE
colonne da INFORMATION_SCHEMA.COLUMNS
set di risultati.