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.

Este tutorial ha sido creado en un VPS de Clouding.io. Puedes crear tu propio VPS desde 3€/mes.

Además, tienes la posibilidad de crear tu VPS con la imagen de WordPress en un clic.

COLABORACIÓ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.