datetime值不正确0000-00- 00 00:00:00 +0000数据库错误号:1292年
大家好,我有一个问题,由我的托管公司所做的服务器升级,我试图了解发生了什么,所以我可以解决这个问题
我的服务器最近升级到服务器版本:5.6.17,我到处都有错误,说我的日期时间值不正确?
它似乎是添加+0000到日期时间的末尾,但我不知道为什么。这曾经在5.5上工作得很好,但是最近的一次升级影响了我的时间戳的工作方式
Error Number: 1292
Incorrect datetime value: '2014-04-02 08:49:43 +0000' for column 'created' at row 1
INSERT INTO `activitylog` (`tablename`, `row`, `user_id`, `description`, `action`, `private`,`created`) VALUES ('user', '1', '1', 'People', 'Updated', 0, '2014-04-02 08:49:43 +0000')
如果我修改这个sql查询没有+0000它的作品?
它会影响我的表中的任何DATETIME类型。
有没有其他人有类似的问题,现在有什么解决方案是让这个工作。目前我想我必须改变我所有的PHP函数来回显日期/时间,而不是在查询字符串上调用NOW()
8条答案
按热度按时间monwx1rj1#
在升级到MySQL 5.7后,我发现这个错误开始在随机情况下发生,即使我没有在查询中提供日期。
这似乎是因为 * 以前 * 版本的MySQL支持像
0000-00-00 00:00:00
这样的日期(默认情况下),但是5.7.4对NO_ZERO_DATE
设置进行了一些更改。如果在使用较新的MySQL版本时仍然存在旧数据,那么可能会出现随机错误。我需要执行这样的查询来将所有零日期重置为另一个日期。
或者,您可以调整
NO_ZERO_DATE
设置,但请注意文档中的说明:NO_ZERO_DATE
模式影响服务器是否允许“0000-00-00”作为有效日期。其效果还取决于是否启用了严格SQL模式。INSERT IGNORE
和UPDATE IGNORE
,允许使用'0000-00-00',插入会产生警告。从MySQL 5.7.4开始,
NO_ZERO_DATE
已被弃用。在MySQL 5.7.4到5.7.7中,NO_ZERO_DATE
在显式命名时不做任何事情。相反,它的效果包含在严格SQL模式的效果中。在MySQL 5.7.8及更高版本中,NO_ZERO_DATE
在显式命名时确实有效,并且不像MySQL 5.7.4之前那样是严格模式的一部分。但是,它应与严格模式结合使用,并且默认情况下处于启用状态。如果启用了NO_ZERO_DATE
但没有同时启用严格模式,则会出现警告,反之亦然。有关更多讨论,请参见MySQL 5.7中的SQL模式更改。由于
NO_ZERO_DATE
已被弃用,它将在未来的MySQL版本中作为单独的模式名称被删除,其效果包含在严格SQL模式的效果中。3qpi33ja2#
好吧,我也犯了同样的错误。我所做的修复是使用这些代码行来查询我遇到问题的数据库:
第一行代码(SELECT)用于查看'SESSION'和'GLOBAL'的当前设置。一旦你将它们都设置为空字符串并再次运行select,它们应该什么都不返回(为空)。
您可能还需要使用
SET SESSION sql_mode = '';
,但这为我解决了这个问题。基本上,其中一个设置是在那里顶起的方式,日期进入数据库(我得到了它在一个'YYYY-MM-DD HH:MM:SS AM/PM'格式)。删除NO_ZERO_IN_DATE
和其他日期选项对我没有帮助。我的网站现在运行正常。希望这能帮上忙。
mbjcgjjk3#
我也面临着同样的问题。
我服从命令,这对我很有效。
plupiseo4#
简短的回答-
NOW()
在你的查询中应该可以很好地与MySQLDATETIME
列一起工作。更长的答案-我不知道你是如何看到
+0000
工作的。DATETIME
列的格式为'YYYY-MM-DD HH:MM:SS'
。当涉及到时区差异时,通常需要以编程方式处理。MySQL在存储和检索TIMESTAMP
数据时确实会将本地时间转换为UTC,但它不会对DATETIME
或其他日期/时间列执行此操作。jchrr9hc5#
原始my.cnf的sql_model设置如下:
我尝试删除NO_ZERO_IN_DATE和NO_ZERO_DATE,但没有效果。但是如果我删除所有的术语(sql_mode为空),错误就消失了。
我回到原来的sql_mode,并认为我会删除条款1-by-1,看看哪一个是原因。第一次尝试是删除STRICT_TRANS_TABLES:
没有错误。所以看起来STRICT_TRANS_TABLES是原因。
xxe27gdn6#
datetime值不正确数据库错误号:1292
TIMESTAMP
数据类型用于同时包含日期和时间部分的值。TIMESTAMP
的范围为'1970-01-01 00:00:01' UTC
到'2038-01-19 03:14:07' UTC
。DATETIME
类型用于同时包含日期和时间部分的值。MySQL以'YYYY-MM-DD HH:MM:SS'
检索并显示DATETIME
值。支持的范围为'1000-01-01 00:00:00' to '9999-12-31 23:59:59'
。您应该在以下情况下使用此类型:日期时间格式
https://dev.mysql.com/doc/refman/5.0/en/date-and-time-types.html
https://dev.mysql.com/doc/refman/5.0/en/datetime.html
http://bugs.mysql.com/bug.php?id=70188
更新:1
你应该像你的代码
'2014-04-02 08:49:43 +0000'
一样删除space
,并像'2014-04-02 08:49:43+0000'
一样更改代码,因为完整的查询如下:***看这里:http://sqlfiddle.com/#!2/a2581/23099
pkbketx97#
我发现,如果您有此问题,此查询可以从MySQL Incorrect datetime value: '0000-00-00 00:00:00'工作
xkftehaa8#
我也面临着类似的问题,但当我应用@JedtheMarine发布的代码时,它解决了我的问题。
我的案子
更新记录时出错:第39行的列“XXX”的日期时间值“2022-04-03 12:00:00 AM”不正确