Tag: mysql

¿Cómo arreglar el problema de las tildes y la eñe en WordPress?

Luego de haber retomado el blog me encontré con un problema: Había un monton de caracteres raros en todo lugar donde antes tenía una tilde o una “eñe”, luego de investigar un poco encontré que le habían cambiado el collation a la base de datos de mi blog.

Así el collation que tenía mi blog decía “latin1_swedish_ci” y yo no entendía el motivo, recurriendo a la documentación pude ver el motivo
https://dev.mysql.com/doc/refman/5.6/en/charset-collation-effect.html

Básicamente mi contenido fué creado con un set de caracteres y al tener la base de datos con un collation distinto pues se hizo todo el embrollo, para solucionarlo tenemos que modificar y poner el set correcto, mi recomendación es utilizar UTF-8

Así que vamos paso a paso con la solución que dicho sea de paso también sirve para MariaDB.

Lo primero es que saques un backup completo de tu base de datos antes de empezar a trabajar, mejor prevenir que lamentar 🙂

Abres una consola de MySQL en tu línea de comandos, PHPMyAdmin o el gestor de tu preferencia y ejecutas este query SQL

ALTER DATABASE nombre_de_la_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Eso te asegura que cuando se cree una nueva tabla se haga con la codificación correcta, ahora nos toca trabajar en las tablas
ALTER TABLE nombre_de_la_tabla CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

Ahora nos toca arreglar las tablas de forma individual, el truco es hacer un dump y luego restaurarlas con el set correcto.
mysqldump -p –default-character-set=utf8 nombre_de_la_db nombre_de_la_tabla > tabla_corregida.sql

Y luego la restauramos con
mysql -p base_de_datos < tabla_corregida.sql

Y eso es todo!

Solución alternativa
Si te da miedo manipular las tablas entonces puedes intentar reemplazar los caracteres malos usando UPDATE

Por ejemplo si quieres arreglar todas las eñes de tus posts tendrías que ejecutar algo como esto:
UPDATE wp_posts SET post_title = REPLACE(post_title, "ñ", "ñ");
UPDATE wp_posts SET post_content = REPLACE(post_content, "ñ", "ñ");

En este ejemplo estoy cambiando tanto el título como el contenido del post, hay más campos y puede ser un poco más tedioso pero si te da más confianza hacerlo así pues adelante.