Questo comportamento potrebbe essere causato da proprietà di connessione
allowMultiQueries=true . La mia ipotesi è che questa proprietà farà sì che MySQL interrompa le query su ; come separatore di query e quindi esegui quelle come query separate, sostanzialmente interrompendo il codice di creazione del trigger.
Come hai detto in una risposta - ora eliminata - aggiungendo allowMultiQueries=true effettivamente risolto il problema (contrariamente alle mie aspettative), il problema potrebbe essere effettivamente l'ultimo ; nella tua domanda. Quindi un'altra cosa da verificare è se il problema scompare rimuovendo l'ultimo ; (in END; ) nel tuo script (e non usando allowMultiQueries=true ). Alcuni database non considerano ; essere valido alla fine di un'istruzione (poiché in realtà è un delimitatore per separare le istruzioni).
(questa risposta si basa sul mio commento sopra)