Вставка MySQL в DATETIME :Безопасно ли использовать формат ISO ::8601?

В нашем проекте мы используем генератор 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, которое рано или поздно будет исправлено?

16
задан raina77ow 15 June 2012 в 15:39
поделиться