Convertir base de datos utf8 a utf8mb4

Cuando se instala una aplicación, esta selecciona el juego de caracteres que más le conviene por el tipo de datos que serán almacenados en la base de datos, no obstante según progresa el desarrollo, mejoran las implementaciones, actualizaciones y cambios similares, una aplicación puede requerir al administrador, cambiar su juego de caracteres por uno diferente.

Esto sucede en Moodle 3.3 el cual requiere de utf8mb4.

Estos cambios se pueden realizar por medio de consultas SQL que alteren las tablas y columnas, no obstante esto puede llegar a ser una tarea realmente tediosa si se tienen muchas tablas.

Por ello bajo nuestra experiencia la forma más rápida suele ser descargar una copia .sql, hacer las modificaciones en el fichero e importar de nuevo la base de datos con los cambios.

Obtener copia de la base de datos

Si tienes experiencia usando la terminal la forma más sencilla es utilizar mysqldump, de esa forma podrás generar una copia de seguridad al vuelo sin necesidad de descarga:

mysqldump -uUSUARIO_MYSQL -pPASSWORD BASE_DE_DATOS > nombre-fichero.sql

En caso contrario puedes descargar la copia desde Copias de seguridad, Descargar una copia de seguridad de la base de datos MySQL.

Modificar el juego de caracteres

Si realizaste el backup vía SSH, lo más sencillo es usar el comando sed para hacer el reemplazo del juego de caracteres antiguo por el nuevo, para este ejemplo, utf8 por utf8mb4, para ello ejecutamos:

sed -i 's/COLLATE utf8_/COLLATE utf8mb4_/g' FICHERO.sql
sed -i 's/character_set_client = utf8/character_set_client = utf8mb4/g' FICHERO.sql
sed -i 's/SET NAMES utf8/SET NAMES utf8mb4/g' FICHERO.sql

Este comando hará el reemplazo de todas las coincidencias.

Si has descargado la copia en tu equipo, deberás abrir el fichero con un editor de código tipo Sublime Text o Visual Studio, y usando la opción de búsqueda y reemplazo, hacer los siguientes cambios

  • Buscar: utf8_unicode_ci Reemplazar por: utf8mb4_unicode_ci
  • Buscar: utf8 Reemplazar por: utf8mb4

Importar base de datos modificada

Finalmente deberás eliminar todas las tablas de la base de datos en uso, lo puedes hacer desde phpMyAdmin y tras esto importar el fichero .sql modificado.

Para este fin podrás usar de igual forma phpMyAdmin si descargarte el .sql en tu equipo, o vía mysql si estás en la terminal:

mysql -uUSUARIO_MYSQL -pPASSWORD NOMBRE_BASE_DATOS < FICHERO.sql

Recuerda que si tienes dudas o no estás seguro del procedimiento indicado, siempre puedes contactarnos y nosotros nos encargaremos de todo el proceso.