Das stimmt aber nicht.
Es würde bloß eine 0 reinschreiben, wenn es NULL bleibt, also garnichts zugewiesen wird.
Das DEFAULT wird nur genommen, wenn das Feld im INSERT garnicht enthalten ist, bzw. wenn es explizit als DEFAULT markiert wurde.
Hier wurde aber "etwas" zugewiesen.
Wenn das
DBMS es nicht selbst kann, dann könnte man vielleicht mit einem Trigger oder CONTAINS CHECK auf sowas wie IS INT versuchen zu verhindern, dass etwas Falsches rein kommt.
Oder im SELECT bzw. VIEW, wo du dieses Feld explizit nach INT castest, bevor es benutzt wird.
Aber natürlich besser schon vorher dafür zu sorgen, dass garnicht erst was Ungültiges rein kommt, bzw. nach dem INSERT nochmal den Inhalt gegenzuprüfen.