Se as colunas estiverem usando o conjunto de caracteres de tabela padrão, será apenas uma consulta por tabela para converter:
ALTER TABLE t CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Se o conjunto de caracteres for definido individualmente em cada coluna, AFAIK não há como fazer isso em todas as colunas de todas as tabelas do banco de dados diretamente no MySql, mas você pode escrever um pequeno programa em sua linguagem de escolha que faça isso.
Seu programa consultaria o
INFORMATION_SCHEMA.COLUMNS
tabela e veja o CHARACTER_SET_NAME
coluna:SELECT * FROM `INFORMATION_SCHEMA.COLUMNS`
WHERE TABLE_SCHEMA = 'dbname' AND CHARACTER_SET_NAME = 'latin1'
Para cada linha de resultado é trivial sintetizar e executar um
ALTER TABLE
consulta no local que altera o conjunto de caracteres e o agrupamento adequadamente:ALTER TABLE t MODIFY col TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Na consulta acima
t
, col
e TEXT
seriam os valores da TABLE_NAME
, COLUMN_NAME
e DATA_TYPE
colunas do INFORMATION_SCHEMA.COLUMNS
conjunto de resultados.