Es que lo que debe usarse no es:
Código MySQL:
Ver originalNEW.c_mess
= `c_mess` AND NEW.m_to
= id_user
AND NEW.id_user
= `m_to`
ni tampoco
Código MySQL:
Ver originalNEW.c_mess
= c_mess
AND NEW.m_to
= id_user
AND NEW.id_user
= m_to
sino
Código MySQL:
Ver originalNEW.c_mess
= NEW.
`c_mess` AND NEW.m_to
= NEW.id_user
AND NEW.id_user
= NEW.
`m_to`
En un TRIGGER los únicos parámetros que existen son o bien los campos del registroo entrante (INSERT y UPDATE) o los del antiguo (UPDATE y DELETE). Pero siempre,
en todos los casos su nombre debe estar precedido por NEW u OLD, según el caso.
Cualquier otro nombre debe ser, o bien una variable local declarada, o un campo de una tabla invocada en una sentencia dentro del TRIGGER (que no puede ser la propia tabla).
Cambiar de versión de MySQL no alterará nada, porque el error no es de versiones sino que estás escribiendo mal la invocación a los campos.
Por otro lado un tema de lógica de INSERT: Si estás haciendo una comparación dentro del propio INSERT, ¿por qué no resuelves eso en la programación de la aplicación y le quitas a la base una responsabilidad que no se necesita?
A fin de cuentas esa validación bien la puedes hacer antes de enviar los datos, ya que sólo estás operando con los VALUE que mandas en el mismo INSERT.