私たちのプロジェクトでは、Zend Framework モデル ジェネレーターを使用します。これは、次のようなものを生成して、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
)。
面白いことに、phpMyAdmin は警告をまったく表示しません。サーバー側のすべてのコードは、このクエリを堅実なクエリとして処理しました。)
問題は、モデルに保存するものを別の文字列形式 (たとえば、'YY-MM-dd HH:mm:ss' など) に本当に再フォーマットする必要があるかということです。遅かれ早かれ?