Cita: No entiendo por que no hace el substr del trigger
Porque el error de longitud de datos se dispara siempre antes de que el trigger se ejecute.
Toda validación que se relacione con la estructura de la tabla, como por ejemplo NOT NULL, valores de FK, o longitud y rango de datos, son validaciones previas a los trigger. Siempre.
Un trigger no está pensado para validar datos, están pensados para realizar procesos con datos que ya son válidos.
El BEFORE representa el momento a escribir definitivamente el dato en la tabla, pero no significa que el dato no haya sido ya introducido en una estructura temporal, que obligatoriamente cumple con las restricciones de la tabla.
¿Se entiende la diferencia?