SQLSTATE [22007]:无效的日期时间格式:1292日期时间值不正确:'2019-03-31 01:52:25'

问题描述 投票:0回答:1

我目前从多个生产数据库中收到很多错误,我坚持说:

SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '2019-03-31 01:49:45' for column 'created_at' at row 1 

这是我的表:

+------------+--------------+------+-----+-------------------+----------------+
| Field      | Type         | Null | Key | Default           | Extra          |
+------------+--------------+------+-----+-------------------+----------------+
| id         | int(11)      | NO   | PRI | NULL              | auto_increment |
| log        | varchar(255) | YES  |     | NULL              |                |
| created_at | timestamp    | YES  |     | CURRENT_TIMESTAMP |                |
| updated_at | datetime     | YES  |     | NULL              |                |
+------------+--------------+------+-----+-------------------+----------------+

MySQL版本:

mysql  Ver 14.14 Distrib 5.7.25, for Linux (x86_64) using  EditLine wrapper

有人可以帮我理解发生了什么吗?


更新: 我不知道发生了什么,但我从错误监视器收到很多通知,现在一切都恢复正常,而我的代码没有任何变化。

错误始于:2019-03-31 01:00:08 结束于:2019-03-31 01:59:03


更新2: 好的,所以我来自葡萄牙,今天计划全国时间改变+1小时,我完全忘了...... 我怀疑这些错误是由于我的服务器或我的MySQL安装在与新时间同步方面滞后造成的。

我会留下这个问题以防其他人遇到同样的问题

mysql mysql-5.7
1个回答
3
投票

这是因为从那天开始的夏令时,所以在凌晨1点到凌晨2点之间的所有时间都是无效的。您会发现问题实际上从'01:00:00'开始,到'01:59:59'结束:

create table t (created_at timestamp null default current_timestamp);
insert into t values('2019-03-31 00:59:59');
insert into t values('2019-03-31 01:00:00');

日期时间值不正确:'2019-03-31 01:00:00'表示第1行的'created_at'列

insert into t values('2019-03-31 01:59:59');

日期时间值不正确:'2019-03-31 01:59:59'表示第1行的'created_at'列

insert into t values('2019-03-31 02:00:00');
select * from t

输出:

created_at
2019-03-31 00:59:59
2019-03-31 02:00:00

将系统时区更改为没有夏令时的系统时区将解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.