Vía nulleando.com.ar nos llega un útil tip para convertir el charset de una base de datos MySQL sin perder (ni cambiar) información.

El procedimiento será el siguiente:

  • Exportar la base de datos actual (la que tiene el charset latin) en un archivo plano (dump file)
  • Crear una base de datos con charset utf8
  • Modificar lo caracteres del “dump file” de latin a utf8
  • Modificar en el “dump file”, CHARSET=latin1 por CHARSET=utf8
  • Importar el “dump file”

Para exportar la base de datos actual, utilizamos el conocido mysqldump:

mysqldump -u mi_usuario -p base_de_datos –default-character-set=latin1 > backup.sql

Abrimos el cliente de línea de comandos de MySQL:

mysql -u mi_usuario -p

Y creamos una nueva base de datos con el set de caracteres utf8:

CREATE DATABASE db_destino CHARACTER SET utf8 COLLATE utf8_general_ci;

Mediante iconv, convertimos el set de caracteres del archivo backup.sql generado anteriormete:

iconv -f ISO-8859-1 -t UTF-8 backup.sql > backup_utf8.sql

Modificamos, en el archivo de backup, todas las referencias a CHARSET=latin1 por CHARSET=utf8. Esto lo puedes hacer desde cualquier editor de texto (mediante Search and Replace) o con Perl:

perl -pi -w -e ‘s/CHARSET=latin1/CHARSET=utf8/g;’ backup_utf8.sql

Finalmente, importamos a la nueva base de datos, creada con anterioridad, el archivo de backup modificado a utf8:

mysql -u mi_usuario -p  db_destino  –default-character-set=utf8 < backup_utf8.sql

Vía: nulleando.com.ar