在我们的项目中,我们使用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);
}
Run Code Online (Sandbox Code Playgroud)
所以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;
Run Code Online (Sandbox Code Playgroud)
......其结果将是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行为将被修复迟早?