Necesito ejecutar estas declaraciones en todas las tablas para todas las columnas.
alter table table_name charset=utf8;
alter table table_name alter column column_name charset=utf8;
¿Es posible automatizar esto de alguna manera dentro de MySQL? Preferiría evitar mysqldump
Actualización: Richard Bronosky me mostró el camino :-)
La consulta que necesitaba ejecutar en cada tabla:
alter table DBname.DBfield CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Consulta loca para generar todas las demás 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';
Solo quería ejecutarlo en una base de datos. Se estaba tardando demasiado en ejecutar todo en una sola pasada. Resultó que estaba generando una consulta por campo por tabla. Y solo era necesaria una consulta por tabla (distinta del rescate). Obtener el resultado en un archivo fue como me di cuenta.
Cómo generar la salida a un archivo:
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
Y finalmente para ejecutar todas las consultas:
mysql --user=user --password=secret < alter.sql
Gracias Richard ¡Eres el hombre!