【发布时间】:2013-07-10 00:50:16
【问题描述】:
我有一个带有 Doctrine 1 的应用程序,我通过 new Zend_Date->getIso() 为对象生成 update_datetime 字段。多年来它工作得很好,但现在我有了一个新笔记本,Doctrine 尝试插入一个 DATETIME 字段作为字符串 "2013-07-12T03:00:00+07:00" 而不是普通的 MySQL 日期时间格式 "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 并输入以下内容:
set sql_mode=NO_ENGINE_SUBSTITUTION; set global sql_mode=NO_ENGINE_SUBSTITUTION;
因此删除STRICT_TRANS_TABLES
更新2 如何永远摆脱 STRICT? How to get rid of STRICT SQL mode in MySQL
【问题讨论】:
-
我会在两台机器上查看您的
php.ini配置。有些东西告诉我你已经在一个而不是另一个上设置了默认时区。 -
已添加
date.timezone- 相同。还有其他想法吗? -
当您比较 PHP 和 Mysql Server 版本以及 Mysql 客户端库版本(和类型)时,您发现了哪些差异?分析此问题的一种方法是找出配置的差异,因为如果存在相同的配置,应用程序将运行相同。 几乎相同可以不同。例如,一台服务器是否在后台使用 mysqlnd?
-
特别注意一下 Mysql Server 版本并比较那个 mysql 配置。这看起来像是 mysql 服务器接受哪些值作为日期时间的问题。这可能是 mysql 服务器配置问题。
-
问题本身的更新对我有用
标签: php mysql zend-framework doctrine doctrine-1.2