Error de cotejamiento al restaurar una base de datos
¿Qué significa este mensaje al restaurar una base de datos desde un archivo SQL de respaldo?
Error consulta SQL: Copiar -- -- Base de datos: nombreDeLaBaseDeDatos -- CREATE DATABASE IF NOT EXISTS cnergiaDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; MySQL ha dicho: Documentación #1273 - Cotejo (Collation) desconocido: 'utf8mb4_0900_ai_ci'
Este mensaje aporta la siguiente información:
El error #1273 - Cotejo (Collation) desconocido: 'utf8mb4_0900_ai_ci' se produce al intentar importar una base de datos con un cotejamiento (collation) que la versión de MySQL no reconoce (ver enlaces relacionados).
Causa del error
El cotejamiento utf8mb4_0900_ai_ci es exclusivo de MySQL 8.0. Si el servidor donde se realizará el respaldo usa MySQL 5.7 o MariaDB, ese cotejamiento no existe y causa error.
Posibles soluciones
1. Modificar el archivo SQL antes de importarlo (solución recomendada)
Abrir el archivo .sql en un editor de texto (Notepad++, VS Code, nano, etc.).
Nota: Es especialmente importante elegir un editor con soporte para grandes archivos en caso de archivos de respaldo grandes.
Buscar y reemplazar todas las ocurrencias de utf8mb4_0900_ai_ci por utf8mb4_general_ci o utf8mb4_unicode_ci.
Revisar CREATE DATABASE, si tiene algo como:
CREATE DATABASE IF NOT EXISTS `nombreDeLaBaseDeDatos` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
Reemplazarlo por:
CREATE DATABASE IF NOT EXISTS `nombreDeLaBaseDeDatos` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Guardar el archivo y y reintentar la importación.
2. Convertir la base de datos a una versión compatible antes de exportar
Si tenemos acceso al servidor donde se generó el respaldo, podemos exportar la base con una collation compatible:
Seleccionamos la base, lueg, en phpMyAdmin, vamos a Exportar. En "Opciones de formato", cambiamos la collation a utf8mb4_unicode_ci.
Descargamos el archivo.sql y lo utilizamos en una nueva importación.
3. Si es posible actualizar, utilizamos MySQL 8 en el servidor de destino
Si el servidor permite, puedes actualizar MySQL a la versión 8.0 para que soporte utf8mb4_0900_ai_ci.
mysql --version
Si devuelve el dato de que tenemos MySQL 5.7 o MariaDB, y tenemos los permisos necesarios, podemos considerar actualizarlo.
Nota: Esta solución puede afectar otras aplicaciones en el servidor, por lo que sería la última opción en la escala de preferencias.
Enlaces relacionados
- StackOverflow | ¿Cual es el mejor cotejamiento para mi Base de Datos MySQL?
- Hostinet | Cómo Solucionar el problema «Unknown Collation» al Importar una Base de Datos en phpMyAdmin
Saludos y bonita jornada para ti.
Plácido Luna
#MySQL #basesDeDatos #versiones #createDatabase #collation #collate #cotejamiento #MariaDB #restaurarBasesDeDatos