Eu preciso executar essas instruções em todas as tabelas para todas as colunas.
alter table table_name charset=utf8;
alter table table_name alter column column_name charset=utf8;
É possível automatizar isso de alguma forma dentro do MySQL? Eu preferiria evitar o mysqldump
Atualização: Richard Bronosky me mostrou o caminho :-)
A consulta que eu precisava executar em todas as tabelas:
alter table DBname.DBfield CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Consulta maluca para gerar todas as outras consultas:
SELECT distinct CONCAT( 'alter table ', TABLE_SCHEMA, '.', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'DBname';
Eu só queria executá-lo em um banco de dados. Estava demorando muito para executar tudo de uma só vez. Descobriu-se que estava gerando uma consulta por campo por tabela. E apenas uma consulta por tabela era necessária (diferente do resgate). Obter a saída em um arquivo foi como eu percebi isso.
Como gerar a saída para um arquivo:
mysql -B -N --user=user --password=secret -e "SELECT distinct CONCAT( 'alter table ', TABLE_SCHEMA, '.', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'DBname';" > alter.sql
E, finalmente, para executar todas as consultas:
mysql --user=user --password=secret < alter.sql
Obrigado Richard. Você é o cara!