Primeiro, não acredite apenas na minha palavra! Teste minha sugestão com isto:
select CONCAT('alter table ',TABLE_SCHEMA,'.',TABLE_NAME,' charset=utf8;') from information_schema.TABLES WHERE TABLE_SCHEMA != 'information_schema' limit 10; select CONCAT('alter table ',TABLE_SCHEMA,'.',TABLE_NAME,' alter column ',COLUMN_NAME,' charset=utf8;') from information_schema.COLUMNS WHERE TABLE_SCHEMA != 'information_schema' limit 10;
Se você se sentir bem com o resultado disso, remova as cláusulas limit e salve a saída em um script SQL ou, obtenha a fantasia e canalize a saída diretamente para o mysql, de forma semelhante ao que demonstrar here . Isso ficaria assim:
mysql -B -N --host=prod-db1 --user=admin --password=secret -e "select CONCAT('alter table ',TABLE_SCHEMA,'.',TABLE_NAME,' charset=utf8;') from information_schema.TABLES WHERE TABLE_SCHEMA != 'information_schema'; select CONCAT('alter table ',TABLE_SCHEMA,'.',TABLE_NAME,' alter column ',COLUMN_NAME,' charset=utf8;') from information_schema.COLUMNS WHERE TABLE_SCHEMA != 'information_schema';" | mysql --host=prod-db1 --user=admin --password=secret
Quando você começa a pensar em usar um SQL válido para gerar um SQL válido, ele muda todo o jogo. Você ficará surpreso com a quantidade de usos que encontrar.