Resolver Unknown collation: ‘utf8mb4_unicode_520_ci’ al importar una base de datos

unknown collation

Interrumpimos la serie didáctica de mySQL para comentar posibles soluciones al error ‘Unknown collation: ‘utf8mb4_unicode_520_ci», un problema que me he encontrado hoy al migrar una base de datos de un sistema operativo a otro con una versión de mysql diferente.

En este artículo aprenderás 3 formas de solucionar este error, y en la primera de ellas no te hará falta modificar el fichero .sql.

Este error, ‘Unknown collation: ‘utf8mb4_unicode_520_ci’‘, tiene que ver con las codificación de las locales, y al hecho de que la versión 5.5 de mysql no tiene soporte para utf8mb4_520_ci.

Es un poco confuso todo el tema de los juegos de carácteres, por lo que no vamos a tratar de explicarlo, y en su lugar te remitiremos a esta web, por si quieres una explicación más completa del formato UTF8.

Yendo a lo práctico, hay tres posibles soluciones a este problema:

1. Actualizar la versión de mysql

Decían las malas lenguas que con la versión 5.6 de mysql esto ya no pasaba, así que hemos querido comprobarlo porque estábamos usando la 5.5, y efectivamente así es. Con la versión 5.7 de mysql, que es la que hemos podido probar, este problema ya no pasa.

Este sería el método recomendado si no quieres modificar la codificación de tus datos, a fin de mantener su integridad y asegurarte de que no pierdes nada. Pero si por algún motivo no pudieras actualizar tu versión de mysql, sigue leyendo porque hay otros dos métodos.

2. Cambiar la codificación en el fichero sql

La primera solución es cambiar todas las expresiones ‘utf8mb4_unicode_520_ci’ por ‘utf8mb4_unicode_ci’, en todo el fichero mysql.

Esto podemos hacerlo con el comando linux sed, o con cualquier software de edición de texto (aunque sed tiene estilo, y es de lo más rápido procesando ficheros grandes).

Para hacerlo con sed, lo haríamos así:

sed -i 's/utf8mb4_unicode_520_ci/utf8mb4_unicode_ci/g' fichero.sql

Explicación del comando: sustituye (s) el primer patrón por el segundo, de forma global (g).

Con esto, el fichero quedaría listo para su importación a una base de datos nueva.

3. Cambiar la codificación al exportar con phpmyadmin

Si no vamos a trabajar por shell, o usamos phpmyadmin para el export, podemos hacer el cambio usando el mismo. En NSS no gastamos phpmyadmin, pero está documentado en este sitio.

Hasta aquí las 3 posibles soluciones, tú eliges cual quieres usar.

Si quieres saber cómo darle permisos a un usuario nuevo a esta base de datos recién creada, consulta este artículo. O usa el tag sql para ver todos los manuales relacionados.

Finalmente, comentarte que si empezaste la importación y falló a medias, tendrás que hacer un drop de la base de datos y volver a crearla, o te dará error de clave primaria repetida.

mysql --user=root -p --database=new < fichero.sql
Enter password:
ERROR 1062 (23000) at line 50: Duplicate entry '17' for key 'PRIMARY'

También hay que tener en cuenta que los ficheros de backup de sql suelen empezar con la creación y definición de la base de datos, por lo que no olvides cambiar esas líneas (o no uses –database=xxx como argumento)

Si tienes cualquier duda o problema, o quieres aportar algo, puedes comentar más abajo. En NSS te ayudamos a depurar esos errores y a migrar tus datos, y lo hacemos con la mayor profesionalidad.

[Total:4    Promedio:5/5]