sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo cambiar la intercalación de todas las filas de latin1_swedish_ci a utf8_unicode_ci?

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.