Si las columnas usan el conjunto de caracteres de tabla predeterminado, entonces solo es una consulta por tabla para convertir:
ALTER TABLE t CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Si el conjunto de caracteres se configura individualmente en cada columna, AFAIK no hay forma de hacerlo en todas las columnas de todas las tablas en la base de datos directamente en MySql, pero podría escribir un pequeño programa en el idioma de su elección que lo haga.
Su programa consultaría el INFORMATION_SCHEMA.COLUMNS
tabla y mire el CHARACTER_SET_NAME
columna:
SELECT * FROM `INFORMATION_SCHEMA.COLUMNS`
WHERE TABLE_SCHEMA = 'dbname' AND CHARACTER_SET_NAME = 'latin1'
Para cada fila de resultados es trivial sintetizar y ejecutar un ALTER TABLE
consulta en el lugar que cambia el juego de caracteres y la intercalación apropiadamente:
ALTER TABLE t MODIFY col TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
En la consulta anterior t
, col
y TEXT
serían los valores de TABLE_NAME
, COLUMN_NAME
y DATA_TYPE
columnas de INFORMATION_SCHEMA.COLUMNS
conjunto de resultados.