MYSQL 不正确的日期时间格式

我有一个带有教义1的应用程序,我通过为对象生成字段。它工作了很多年,但现在我有了一个新的笔记本,Doctrine试图将字段作为字符串插入,而不是普通的MySQL日期时间格式,这完全很奇怪。update_datetimenew 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_TABLESsql_mode/etc/my.cnfmysql -uroot

set sql_mode=NO_ENGINE_SUBSTITUTION; set global sql_mode=NO_ENGINE_SUBSTITUTION;

从而删除STRICT_TRANS_TABLES

更新2如何永远摆脱严格?如何在MySQL中摆脱严格的SQL模式


答案 1

如果存在,您可以尝试在 my.ini中从 sql 模式中删除。STRICT_TRANS_TABLES

这可能会导致此错误,其中包含包含尚未转换为mysql日期时间的格式的日期时间字符串值。此 my.ini 更改已报告为以下修复程序:


答案 2

zend 中的日期常量是通过按此顺序嗅出区域设置来确定的(表单zend_locale注释)

1. Given Locale
2. HTTP Client
3. Server Environment
4. Framework Standard

我认为这两个系统之间的差异将反映在服务器环境中。

若要更正并避免将来出现此问题,可以在应用程序中指定区域设置选项.ini使用这些配置指令。

resources.locale.default = <DEFAULT_LOCALE>
resources.locale.force = false
resources.locale.registry_key = "Zend_Locale"

区域设置应设置为类似en_US

Zend_Locale专门从环境中嗅探区域设置,从调用到 setlocale 并解析结果。


推荐