Desarrollo y bases de datos
Convertir base de datos utf8 a utf8mb4
Una aplicación antigua puede requerir convertir sus tablas de utf8 a utf8mb4. No hagas reemplazos globales sobre un volcado ni elimines las tablas de producción: una sustitución de texto puede modificar datos de usuario, nombres de collations no equivalentes o contenido serializado.
1. Crear y verificar una copia inmutable
Detén temporalmente las escrituras de la aplicación y genera un volcado consistente. -p solicita la contraseña de forma interactiva y evita dejarla en el historial o en la lista de procesos:
umask 077 mysqldump --single-transaction --routines --triggers -u USUARIO_MYSQL -p BASE_DE_DATOS > base-antes-utf8mb4.sql sha256sum base-antes-utf8mb4.sql > base-antes-utf8mb4.sql.sha256 chmod 400 base-antes-utf8mb4.sql base-antes-utf8mb4.sql.sha256 sha256sum -c base-antes-utf8mb4.sql.sha256
Descarga también ambos ficheros a un almacenamiento distinto del hosting. No edites este volcado: será el punto de recuperación.
2. Restaurar en una base nueva
Crea una base vacía, con otro usuario y nombre, y restaura allí la copia:
mysql -u USUARIO_NUEVO -p BASE_NUEVA < base-antes-utf8mb4.sql
Configura un clon de la aplicación para usar BASE_NUEVA y confirma que abre, inicia sesión y ejecuta sus operaciones principales antes de convertir nada.
3. Previsualizar y convertir el clon
Consulta primero las tablas afectadas:
SELECT TABLE_NAME, TABLE_COLLATION FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'BASE_NUEVA' AND TABLE_COLLATION LIKE 'utf8\_%';
Genera las sentencias exactas que necesitarías, revísalas una a una y ejecútalas únicamente sobre BASE_NUEVA:
SELECT CONCAT( 'ALTER TABLE `', TABLE_NAME, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;' ) AS sentencia_a_revisar FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'BASE_NUEVA' AND TABLE_TYPE = 'BASE TABLE' AND TABLE_COLLATION LIKE 'utf8\_%';
La collation concreta debe ser compatible con la versión de MySQL y con la aplicación. Revisa previamente índices de columnas de texto, porque al aumentar el tamaño máximo por carácter algunos índices antiguos pueden exceder el límite admitido.
4. Validar y cambiar la aplicación
Compara entre la base original y el clon:
- esquema, índices, vistas, triggers y rutinas;
- recuento de filas de cada tabla;
- muestras con acentos, caracteres de cuatro bytes y contenido serializado;
- acceso, búsquedas, edición y tareas programadas de la aplicación.
Cuando todas las comprobaciones sean correctas, vuelve a detener las escrituras, repite en el clon los cambios producidos desde el primer volcado si fuese necesario y cambia las credenciales de la aplicación para apuntar a la base nueva. Mantén la base original intacta y sin escrituras durante el periodo de observación.
Reversión
Si la validación posterior falla, detén las escrituras, restaura las credenciales anteriores y vuelve a abrir la aplicación contra la base original. No elimines la base original ni el volcado verificado hasta cerrar expresamente el periodo de recuperación.
Si tienes dudas sobre la collation adecuada o sobre cómo sincronizar las escrituras finales, contacta con soporte antes del cambio.
También te puede ayudar