Buenos días. Os pido ayuda por favor. Yo no soy informática, pero hice el Moodle de mi academia. En el hosting me han actualizado mysql del 5 al 8 y ahora el Moodle me da este fallo. Alguien me puede decir qué tengo que cambiar y en qué documento?

Buenos días. Este problema es muy común al pasar de MySQL 5 a 8, especialmente con plataformas como Moodle.
Voy directo a lo importante:
🔴 Qué está pasando
MySQL 8 cambia varias cosas internas (modo estricto, manejo de índices, codificación, etc.) y versiones antiguas de Moodle no son compatibles.
El error normalmente aparece por:
-
Modo SQL más estricto (
STRICT_TRANS_TABLES) -
Cambios en
utf8vsutf8mb4 -
Índices largos no permitidos igual que antes
-
Funciones o consultas obsoletas
✅ Lo primero que debes verificar
¿Qué versión de Moodle estás usando?
Esto es clave:
-
Moodle 3.9 o superior → compatible con MySQL 8
-
Moodle anterior → fallará
🔧 Soluciones (de más recomendable a parche rápido)
🟢 OPCIÓN 1 (RECOMENDADA): Actualizar Moodle
Si tu Moodle es antiguo:
-
Haz backup completo (archivos + base de datos)
-
Actualiza a una versión compatible (idealmente 4.x)
-
Sigue guía oficial de actualización
👉 Esta es la solución correcta a largo plazo
🟡 OPCIÓN 2: Cambiar configuración de MySQL (rápido)
Si no puedes actualizar aún, pide al hosting o cambia en my.cnf:
O quitar modos estrictos como:
ONLY_FULL_GROUP_BY
⚠️ Esto “relaja” MySQL 8 para que se comporte más como MySQL 5
🟡 OPCIÓN 3: Revisar codificación (muy común)
Moodle requiere:
-
utf8mb4 -
innodb_large_prefix=ON
Y en algunos casos:
🟡 OPCIÓN 4: Cambiar driver en config.php
Revisa tu archivo:
Y asegúrate que tienes algo como:
📍 Dónde se cambia esto
Depende del tipo de solución:
| Problema | Archivo / lugar |
|---|---|
| Config DB Moodle | config.php |
| Error SQL / compatibilidad | versión de Moodle |
| Config MySQL | my.cnf (servidor) o panel hosting |
| Codificación | base de datos (phpMyAdmin) |
💡 Recomendación profesional (importante)
No intentes “parchar demasiado” si tu Moodle es viejo.
👉 En entorno productivo:
-
MySQL 8 + Moodle viejo = inestabilidad segura
-
Mejor actualizar Moodle que ajustar MySQL
🔴 Diagnóstico claro
El error clave es este:
👉 El problema es que estás usando una tabla llamada groups, que en MySQL 8 es una palabra reservada.
En versiones antiguas (MySQL 5) esto pasaba desapercibido, pero en MySQL 8 ya rompe las consultas SQL.
⚠️ Por qué ocurre
La consulta que falla es:
FROM groups g, groups_members gm
WHERE gm.groupid=g.id AND gm.userid=?
👉 groups ahora entra en conflicto con la sintaxis SQL (por GROUPS, relacionado con GROUP BY).
✅ Soluciones (ordenadas por viabilidad)
🟢 OPCIÓN 1 (LA CORRECTA): Actualizar Moodle
Tu versión de Moodle es antigua.
✔ Moodle moderno ya corrige esto usando comillas:
👉 Solución definitiva:
-
Actualizar mínimo a Moodle 3.9+
-
Ideal: Moodle 4.x
🟡 OPCIÓN 2 (PARCHE RÁPIDO): Forzar compatibilidad en MySQL
Pide a tu hosting o ajusta:
Y eliminar:
STRICT_TRANS_TABLES
⚠️ Esto no siempre soluciona lo de groups, pero puede ayudar con otros errores.
🔴 OPCIÓN 3 (NO RECOMENDADA PERO FUNCIONAL): Modificar código Moodle
Tendrías que editar archivos PHP donde aparece:
Y cambiarlo a:
📍 Archivos implicados según tu error:
-
/lib/dml/mysqli_native_moodle_database.php -
/lib/moodlelib.php
⚠️ Problema:
-
Son MUCHAS consultas
-
Se pierde al actualizar
-
Riesgo de romper más cosas
🟣 OPCIÓN 4 (rápida si hosting lo permite): Volver a MySQL 5.7
Si puedes:
👉 Baja la versión de MySQL a 5.7
✔ Es lo más rápido si necesitas que funcione YA
🎯 Recomendación profesional (directa)
Tienes 2 caminos reales:
| Escenario | Qué hacer |
|---|---|
| Urgente (que funcione hoy) | Bajar MySQL a 5.7 |
| Correcto a futuro | Actualizar Moodle |
📌 Conclusión técnica
El error NO es de configuración, es de incompatibilidad estructural entre Moodle antiguo y MySQL 8 (palabras reservadas + SQL moderno).