我有一个使用Doctrine 1的应用程序,并且update_datetime通过生成对象的字段new Zend_Date->getIso()。它工作了好几年,但现在我有了一个新的笔记本,Doctrine尝试将DATETIME字段作为字符串插入,"2013-07-12T03:00:00+07:00"而不是"2013-07-12 00:00:00"完全奇怪的普通MySQL datetime格式。
update_datetime
new Zend_Date->getIso()
DATETIME
"2013-07-12T03:00:00+07:00"
"2013-07-12 00:00:00"
完全相同的代码可以在另一台计算机上正常运行。一切几乎都相同–两者均使用MySQL 5.6.12,PHP 5.3.15。知道我应该去哪里看吗?
Fatal error: Uncaught exception 'Doctrine_Connection_Mysql_Exception' with message 'SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '2013-07-12T03:00:00+07:00' for column 'nextrun' at row 1' in library/Doctrine/Connection.php:1083
更新
好的,在StackOverflow社区的帮助下,我终于解决了它。问题出STRICT_TRANS_TABLES在sql_mode变量中。但是更改它/etc/my.cnf似乎还不够,所以我必须运行mysql -uroot并键入以下内容:
STRICT_TRANS_TABLES
sql_mode
/etc/my.cnf
mysql -uroot
set sql_mode=NO_ENGINE_SUBSTITUTION; set global sql_mode=NO_ENGINE_SUBSTITUTION;
因此删除 STRICT_TRANS_TABLES
UPDATE2 如何永远摆脱STRICT?如何在MySQL中摆脱STRICT SQL模式
如果存在,则可以尝试STRICT_TRANS_TABLES从my.ini中的sql-mode中删除。
这可能会导致此错误,其中datetime字符串值包含尚未转换为mysql datetime的格式。据报道此my.ini更改已修复: