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'
ORDER BY 1

Cada línea o instrucción queda de esta manera:

ALTER TABLE `database_name`.`table_name` CONVERT TO CHARACTER SET 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:

ALTER DATABASE `database_name`
    DEFAULT CHARACTER SET utf8
    DEFAULT COLLATE utf8_general_ci;

ALTER DATABASE `database_name`
    CHARACTER SET utf8
    COLLATE utf8_general_ci;