Это было исправлено в MySQL 5.1.17 , чтобы позволить CURDATE () иметь значение меньше NOW () при хранении в столбце DATE.
Теперь, сравнивая DATE с DATETIME, они сравниваются как DATETIME. Когда DATE приводится к DATETIME, у него нулевой час.
Если my_date_field
равно '2010-01-01'
, а NOW()
равно '2010-01-01 05:01:01'
, то при сравнении их my_date_field
повышается до '2010-01-01 00:00:00'
, что, очевидно, меньше '2010-01-01 05:01:01'
.
Первоначально, когда левая сторона была столбцом, переход от DATE к DATETIME не происходил. Однако, по-видимому, они думали, что более последовательно всегда продвигать его.
Извините, но вам просто повезло, что это сработало раньше. Дата с нулевым часом должна быть меньше той же даты с ненулевым часом.
К сожалению, нет способа отключить это "исправление ошибки". Ваше единственное решение - изменить NOW () на CURDATE () или вернуться к предыдущей версии.
На самом деле вы можете скомпилировать свою собственную версию и отменить «исправление ошибки» или переопределить функцию NOW ().