Esta semana he tenido problemas con la base de datos de este blog. Quería migrar de la versión mySQL 4 a mySQL 5.1 para poder utilizar la última versión de Wordpress que al parecer ya no funciona con las versiones antiguas de bases de datos mySQL.
Desde la empresa de hosting donde está alojada esta web me advirtieron que este cambio podía suponer algunas incompatibilidades con la base de datos antigua pero si fallaba podíamos volver a la versión anterior… Lo que NO me dijeron es que si no funcionaba y necesitaba volver a la versión antigua i cargar un backup de la base de datos me cobrarían casi 50 euros (45€ + IVA, concretamente). Pero este es otro tema…
Finalmente accedí a la migración de mySQL4 a mSQL5. Todo funcionó bien excepto los caracteres especiales: acentos, eñes, etc… Habían desaparecido de la base de datos y en su lugar aparecían, por ejemplo:
ñ: ñ
ó: ó
Y en el blog tampoco se mostraban los caracteres especiales, sólo se veía su codificación.
La causa del problema:
La causa es que mySQL crea bases de datos por defecto con cotejamiento latin1_swedish_ci y al instalar Wordpress nos crea una base de datos con este cotejamiento sin darnos cuenta. Cuando migramos o exportamos la base de datos a un fichero SQL y se convierten los acentos a códigos utf8. Y si replicamos la base de datos en la nueva versión mySQL5 está tendrá la codificación original latin1_swedish_ci y será incompatible con los datos cargados.
La solución:
Después de buscar scripts para transformar la codificación, intentar volver a la versión de mysql4, etc. Encontré una solución más sencilla:
1. Si tenemos permisos para crear bases de datos e importar:
- Abirmos la base de datos con phpMyAdmin
- Eliminamos la base de datos migrada
- En la pestaña “importar” cargamos nuestro fichero de exportación SQL con la base de datos antigua.
- Indicamos “Juego de caracteres del archivo: utf8″.
- Ya podemos comprobar que vuelven a aparecer los acentos y ñ.
2. Si sólo tenemos permisos para crear tablas y modificar bases de datos existentes (como era mi caso):
- Editamos el archivo de SQL donde exportamos la base de datos original (mySQL4).
- Eliminamos las líneas de creación de la base de datos:
CREATE DATABASE `nombre_bd`;
USE nombre_bd;
- Abrimos nuestra nueva base de datos (en mySQL5) desde phpMyAdmin.
- En la pestaña “Operaciones” cambiamos el cotejamiento a “utf8_general_ci”.
- Eliminamos todas las tablas de la base de datos.
- En la pestaña “importar” cargamos el fichero SQL que hemos modificado, indicando “Juego de caracteres del archivo: utf8″.
¡Y FUNCIONA!