MySQLdump con problemas de codificación

Aunque hoy en día todo está en UTF-8 (incluso en UTF-8 mb4) no siempre ha sido así, y cuando hay migraciones con mysqldump es posible encontrarse que al restaurar aparecen «letras raras».

Esas letras raras suelen corresponder con letras «no ascii», es decir, letras como «á» o «ñ» y que se ven de forma extraña.

En la mayoría de casos esto viene porque las bases de datos antiguas no están configuradas en UTF-8 por defecto, por lo que al exportar nos aparecerán problemas de codificación que se van arrastrando hasta la restauración.

Deberemos seguir 3 pasos a la hora de hacer la copia de seguridad y restaurarla.

Copia de Seguridad

El primero de los pasos es hacer el mysqldump, pero con unos cambios significativos de lo que es habitual.

mysqldump --default-character-set=latin1 basededatos -r copiadeseguridad.sql

Por un lado, definiremos el set de caracteres en latin1 (--default-character-set=latin1) que es lo que por defecto viene con las bases de datos antiguas.

Por otro lado no haremos el habitual «>» sino un «-r» para guardar el fichero.

Eliminando «latin1»

El siguiente paso será el de eliminar la línea que ha añadido la descarga. Podemos hacerlo manualmente, simplemente abriendo el fichero y buscando en las primeras líneas el texto, y eliminándolo:

/*!40101 SET NAMES latin1 */;

O podemos lanzar un comando para que lo elimine (por ejemplo si el fichero es muy grande).

sed -i 's/\/*!40101 SET NAMES latin1 *\/;/ /' copiadeseguridad.sql

Restaurando la copia

Para restaurar la copia accederemos al nuevo servidor de base de datos y entraremos en la base de datos forzando el nuevo set de caracteres.

mysql --default-character-set=utf8mb4 basededatos

Una vez dentro, estableceremos el set:

SET names 'utf8';

Y posteriormente cargaremos el nuevo fichero de la base de datos.

SOURCE copiadeseguridad.sql;

Ahora deberíamos poder acceder a nuestro WordPress y ver correctamente los caracteres del sitio.


Sobre este documento

Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.

Deja un comentario