MySQL 5.6.19 TIMESTAMP 不能接受很多正确的值

jsi*_*sky 3 mysql datetime timestamp mysql-5.6

我遇到了一个非常奇怪的问题,不明白这一点。

CREATE TABLE test (time TIMESTAMP NOT NULL DEFAULT NOW()) ENGINE=INNODB;

mysql> insert into test (time) values("2011-03-13 01:08:04");
Query OK, 1 row affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

这很好。现在,仅将时间更改 1 小时:

mysql> insert into test (time) values("2011-03-13 02:08:04");
ERROR 1292 (22007): Incorrect datetime value: '2011-03-13 02:08:04' for column 'time' at row 1
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?我随机插入日期时间值并发现许多值无法插入:“2011-03-13 02:08:04”、“2010-03-14 02:04:05”、“2009-03-08 02” :24:52", "2009-03-08 02:48:27", "2011-03-13 02:06:01", "2005-04-03 02:00:44"...

将小时更改为 1 或将年份更改为 1 可以解决问题,但当然不是真正的解决方法。

spe*_*593 6

对于遵循夏令时调整的美国时区,这些日期时间看起来很像无效值。

在 3 月的一个星期天早上,夏令时时钟“向前”一小时,有效地跳过了凌晨 2 点到凌晨 3 点之间的这一小时。凌晨 2 点和凌晨 3 点之间的小时不存在,因此指定该小时的值不是“正确”值。

您观察到的行为是预期的行为。

请注意,这些值在 UTC 'time_zone=+0:00' 或不遵守夏令时的时区中有效。

(另请注意,相反的问题发生在秋季,当时钟“回退”一小时;然后在凌晨 2 点和凌晨 3 点之间有两个独立的小时,它们具有相同的编码值,但时区不同。02:30 CST vs 02:30 CDT)