Puedes jugar con el sql_mode
para cambiar el comportamiento de cómo MySQL maneja la fecha no válida.
Según el manual de MySQL , esto sucede cuando inserta un valor de fecha incorrecto:
Entonces, se inserta un valor cero y en realidad recibe una advertencia al respecto. Puedes verlo con show warnings
comando.
insert into TableName (`date`) values ('2015-02-29');
-- 1 row(s) affected
show warnings
-- Warning 1264 Out of range value for column 'date' at row 1
Puede cambiar este comportamiento para almacenar el valor no válido, si lo necesita (Manual de MySQL ):
Por ejemplo, lo siguiente debería funcionar:
set @@sql_mode='allow_invalid_dates';
insert into TableName (`date`) values ('2015-02-29');
-- 1 row(s) affected
O también puede cambiar el comportamiento de cargar datos o insertar para reportar el error:
Ejemplo:
set @@sql_mode='traditional';
insert into TableName (`date`) values ('2015-02-29');
Error Code: 1292. Incorrect date value: '2015-02-29' for column 'date' at row 1