1800-00-00
недействительная дата.
MySQL заменяет его действительным значением даты.
Вот объяснение того, как эта работа за кулисами:
1800-00-00 ==> 1799-11-30 -- substract 1 month and 1 day from valid 1800-01-01
1800-00-01 ==> 1799-12-01 -- substract 1 month from valid 1800-01-01
1800-01-00 ==> 1799-12-31 -- substract 1 day from valid 1800-01-01
1800-00-31 ==> 1799-12-31 -- substract 1 day from valid 1800-01-01
1800-01-01 ==> 1800-01-01 -- substract nothing, it's a valid date
Если дата, как 1800-00-00
действует для вас, потому что вы не знаете, месяц или день, когда произошло событие, вы должны рассмотрите возможность изменения типа столбца на varchar
вместо date
, потому что в будущем вы столкнетесь с проблемами - особенно при использовании ODBC. Эти даты будут пустыми, так как они не известны этому интерфейсу.
Конечно, вы должны быть полностью осведомлены о том, что вы отказываетесь от создания SQL-запросов, которые обрабатывают и вычисляют более date
типа (конкретные функции), но если ваш случай является «более или менее точной датой», такие запросы не будут " t действительно дает стабильный результат в любом случае.
Как вы создали свой стол? Есть ли какие-то расчеты на дату? – kojow7
Вы можете создать sqlfiddle, чтобы воссоздать странное поведение? –