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

  1. StackOverflow | ¿Cual es el mejor cotejamiento para mi Base de Datos MySQL?
  2. 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

Replies (0)
Login or Join to comment.