Convertir BD en MySQL de LATIN1 a UTF8

A todos los administradores o desarrolladores Web nos ha pasado alguna vez que nos equivocamos o tenemos que hacer un porting a causa de la dichosa codificación de caracteres.

El problema viene porque normalmente en MySQL la codificación de caracteres por defecto es la dependiente de la configuración local de la máquina donde está instalado (en mi caso LATIN1), sin embargo lo más común es que la codificación correcta en la mayoría de los casos es UTF8.

En este post se explicará el proceso detalladamente:

Backup de BD vieja

Hacer un backup de la base de datos con la codificación mala (LATIN1) a un fichero de texto:

mysqldump -u <usuario_BD> \
          -p <nombre_BD_latin1> \
          --default-character-set=latin1 > <nombre_BD_latin1>.sql

Donde: usuario_BD es el nombre de usuario de la base de datos, nombre_BD_latin1 es el nombre de la base de datos con la codificación mala; este comando te pedirá la clave del usuario de base de datos introducido.

Crear la BD nueva

Crear una base de datos vacía con codificación de caracteres UTF8:

mysql -u <usuario_BD> -p
CREATE DATABASE <nombre_BD_utf8> \
                CHARACTER SET utf8 COLLATE \
                utf8_general_ci;
quit

Convertir formato e importar

Modificar los caracteres del backup de LATIN1 a UTF8:

iconv -f ISO-8859-1 -t UTF-8 <nombre_BD_latin1>.sql > \
<nombre_BD_utf8>.sql

Substituir en la creación de las tablas del fichero de backup las cadenas que hacen que las tablas se creen con la codificación mala:

perl -pi -w -e 's/CHARSET=latin1/CHARSET=utf8/g;' \
<nombre_BD_utf8>.sql

Importar el fichero de backup en la nueva base de datos:

mysql -u <usuario_BD> \
      -p <nombre_BD_utf8> \
      --default-character-set=utf8 < <nombre_BD_utf8>.sql

Referencias

Enlaces a información de interés sobre el tema:

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.