La conversión de la codificación de caracteres en una base de datos de WordPress puede ser un proceso delicado, pero es esencial para evitar problemas con caracteres extraños, errores de visualización y compatibilidad con idiomas internacionales. En este artículo, se explica paso a paso cómo convertir correctamente la codificación de la base de datos de WordPress MySQL o MariaDB.
En versiones anteriores a WordPress 2.1.3, la mayoría de las bases de datos utilizaban el conjunto de caracteres latin1 y la colación latin1_swedish_ci por defecto. A partir de WordPress 2.2, se introdujo la posibilidad de definir la codificación en el archivo wp-config.php, siendo UTF-8 la opción recomendada.
Sin embargo, cambiar la codificación en wp-config.php no altera automáticamente las tablas y columnas existentes, lo que puede generar problemas al recuperar o guardar datos.
Antes de comenzar la conversión, es imprescindible hacer una copia de seguridad de la base de datos. Se recomienda seguir estos pasos:
✅ Exportar la base de datos usando phpMyAdmin o el comando mysqldump.
✅ Crear un entorno de pruebas donde se pueda verificar la conversión antes de aplicarla al sitio en producción.
✅ Identificar la codificación actual de la base de datos y las tablas mediante phpMyAdmin o con el siguiente comando SQL:
SELECT schema_name, default_character_set_name FROM information_schema.schemata;
El siguiente comando cambia el conjunto de caracteres y la colación de la base de datos:
ALTER DATABASE nombre_base_de_datos CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
???? Nota: Esto solo afectará a nuevas tablas, pero no a las existentes.
Para actualizar las tablas existentes, usa el siguiente comando para cada tabla:
ALTER TABLE wp_posts CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
???? Repite este comando para todas las tablas de la base de datos, reemplazando wp_posts por el nombre de cada tabla.
Cada columna con datos en formato texto (TEXT, VARCHAR, LONGTEXT, etc.) debe ser convertida. Usa el siguiente comando para cada columna:
ALTER TABLE wp_posts CHANGE post_content post_content LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
???? Importante: Si tienes ENUM o VARCHAR, asegúrate de especificar la longitud correcta:
ALTER TABLE wp_users CHANGE user_email user_email VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Para columnas ENUM, especifica los valores permitidos:
ALTER TABLE wp_comments CHANGE comment_subscribe comment_subscribe ENUM('Y','N') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'N';
Si después de la conversión los caracteres siguen viéndose incorrectamente, usa el método BLOB para evitar la corrupción de datos:
ALTER TABLE wp_posts CHANGE post_content post_content LONGBLOB; ALTER TABLE wp_posts CHANGE post_content post_content LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
???? Este método convierte temporalmente los datos a un formato binario (BLOB) antes de cambiarlos nuevamente a texto, evitando pérdidas de información.
mysqldump (recomendado para grandes bases de datos)Si tienes acceso a la consola, puedes exportar la base de datos en formato latin1 y luego importarla en formato utf8mb4:
mysqldump -u usuario -p --default-character-set=latin1 nombre_base > backup.sql
Luego, importa el archivo convertido a UTF-8:
mysql -u usuario -p --default-character-set=utf8mb4 nombre_base < backup.sql
???? Este método garantiza que los caracteres sean leídos correctamente antes de la conversión.
wp-config.phpDespués de completar la conversión, edita el archivo wp-config.php y verifica que las siguientes líneas estén configuradas correctamente:
define('DB_CHARSET', 'utf8mb4');
define('DB_COLLATE', 'utf8mb4_unicode_ci');
???? Si tu sitio usa emojis u otros caracteres especiales, UTF-8MB4 es la mejor opción.
Para asegurarse de que todo funciona correctamente:
✅ Revisar los datos en phpMyAdmin: ¿Se ven correctamente los caracteres especiales?
✅ Añadir texto en diferentes idiomas en un post de prueba y verificar su correcta visualización.
✅ Verificar la base de datos:
SELECT post_content FROM wp_posts WHERE post_content LIKE '%áéíóúñ%';
Si los caracteres siguen mostrándose incorrectamente, intenta limpiar la caché o revisar si hay plugins interfiriendo con la codificación.
???? Siempre haz una copia de seguridad antes de modificar la base de datos.
???? Realiza pruebas en un entorno de desarrollo antes de aplicar los cambios en producción.
???? Si sigues teniendo problemas, considera actualizar MySQL a la última versión disponible.
La conversión de la base de datos de WordPress a UTF-8 es fundamental para garantizar compatibilidad con múltiples idiomas y evitar errores de codificación. Siguiendo estos pasos, podrás realizar la conversión de manera segura y efectiva, asegurando que tu sitio web funcione correctamente sin perder datos. ????
vía: Codex WordPress
