В нашем проекте мы используем генератор Zend Framework Model, который создает что-то вроде этого, чтобы установить свойства, которые хранятся в DB (MySQL), как поля DATETIME:
public function setObjectDatetime($data) {
if (! $data instanceof Zend_Date) { ... some conversion code ... }
$this->objectDatetime = $data->toString(Zend_Date::ISO_8601);
}
Таким образом, форматированная строка ISO:: 8601 (например, "2012-06-15T18: 33: 00 + 03: 00" ) - это то, что на самом деле хранится как свойство.
Проблема возникает, когда мы пытаемся save
эту модель и передаем эту строку в MySQL (версия 5.5.16): она вызывает предупреждение, но все равно вставляет/обновляет соответствующую строку с правильным результатом. Легко проверить, что проблема вызвана MySQL, а не поведение некоторых драйверов: просто введите такой запрос, как...
UPDATE table_name SET datetime_field = '2012-06-15T18:33:00+03:00' WHERE id = 1;
... и результат будет 1 row affected, 1 warning
, с
1264 | Out of range value for column 'dt' at row 1
(показано SHOW WARNINGS
).
К моему amuzement, phpMyAdmin вообще не показывает никаких предупреждений; и весь серверный код обработал этот запрос как сплошной. )
Итак, вопрос в том, должен ли мы действительно переформатировать то, что мы храним в нашей Модели, в другой строковый формат (например, "YY-MM-dd HH: mm: ss"?) Или это просто какое-то странное поведение MySQL, будет исправлено рано или поздно?