在我们的项目中,我们使用 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'?)还是只是 MySQL 的一些奇怪行为将被修复迟早?