В нашем проекте мы используем генератор Zend Framework Model, который создает что-то вроде этого, чтобы установить свойства, которые хранятся в БД (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
).
К моему удивлению, phpMyAdmin вообще не показывает никаких предупреждений; и весь код на стороне сервера -обрабатывал этот запрос как цельный.)
Итак, вопрос :в том, должны ли мы действительно переформатировать то, что мы храним в нашей Модели, в другой строковый формат ('ГГ -ММ -дд ЧЧ :мм :сс', например? )Или это просто какое-то странное поведение MySQL, которое рано или поздно будет исправлено?