Io userei un CHAR, visto che credo che la lunghezza possa variare solo di un paio di cifre (VARCHAR comporta sempre un overhead).
Comunque il tuo problema fa capire che NON bisogna mai mantenere l'SQL Mode di default di MySQL, ma sempre impostarlo nel modo più restrittivo possibile. Altrimenti MySQL fa finta di fare quello che le chiedi, e dopo un po' scopri che ti ha preso per i fondelli e hai le tabelle piene di valori-spazzatura che non hanno significato. Come minimo, usa:
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,STRICT_ALL_TABLES,ERROR_FOR_D IVISION_BY_ZERO';