Al realizar una actualización a un sitio web desarrollado sobre la plataforma Drupal (administrador de contenidos), y al pasar el sitio web al idioma español, nos encontramos que algunas tablas presentaban la colación (collation) errónea y nos mostraba el siguiente error:
user warning: Illegal mix of collations
Afortunadamente con este script de Mysql (ver 5.x o superior), se pueden generar las instrucciones necesarias para corregir el problema en cada tabla:
SELECT CONCAT('ALTER TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`, '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') as stmt
FROM `information_schema`.`TABLES` t
WHERE 1
AND t.`TABLE_SCHEMA` = 'database_name'
ORDERBY 1
Cada línea o instrucción queda de esta manera:
ALTERTABLE `database_name`.`table_name` CONVERTTOCHARACTERSET utf8 COLLATE utf8_general_ci
Reemplaze 'database_name' con el nombre de su base de datos, ejecute la instrucción, copie y pegue el resultado para ejecutarlo y listo!, pan comido...
Y por último para asegurarse que la base de datos y tablas nuevas que se creen tengan la misma colación, ejecute:
ALTERDATABASE `database_name
`
DEFAULTCHARACTERSET utf8
DEFAULTCOLLATE utf8_general_ci;
ALTERDATABASE `database_name
`
CHARACTERSET utf8
COLLATE utf8_general_ci;