MySQL1292 不正确的日期时间值

MySQL 1292 Incorrect datetime value

当我尝试将“2011/03/13 02:53:50.000000000”插入时间戳列时出现此错误。如果我将 13 更改为 15、14、12 或 11,则没有问题。我也尝试过将 /'s 更改为 -'s 但仍然不行。

我查看了与此错误相关的其他一些线程,但 none 似乎适用。

我是 运行 版本 5.7.9。

你需要试试这个:

STR_TO_DATE( '2011/03/13 02:53:50', '%Y/%m/%d %H:%i:%s')

否则您必须使用破折号分隔符 (-) 插入日期,例如

'2011-03-13 02:53:50' 

SQL FIDDLE DEMO

我认为您需要在插入之前使用一些 str conversions in MySQL。或者在查询 MySQL.

之前以正确的格式准备数据

微秒格式也不对。 MySQL documentation clearly states this:

A DATETIME or TIMESTAMP value can include a trailing fractional seconds part in up to microseconds (6 digits) precision.


更新:在我的本地主机上,我有相同版本的 MySQL,并且可以使用。 尝试执行转换

select str_to_date("2011-03-13 02:53:50.000000", "%Y-%m-%d %H:%i:%s.%f") as `t`

并得到:

+----------------------------+
| t                          |
+----------------------------+
| 2011-03-13 02:53:50.000000 |
+----------------------------+
1 row in set (0.00 sec)

这是 SQLFiddle,它证实了其他版本 MySQL 上的内容。

我运行没有想法,我认为问题与Table结构中的"local glitch"或MySQL+OS的特定版本有关.

仍然不确定问题是什么 is/was,可能是 CentOS 和 MySQL 版本的组合。我将列更改为 datatime(6) 而不是 timestamp(6) 并且我能够成功导入所有数据。

我花了一段时间才弄明白...

问题是 '2011-03-13 02:53:50' 是非法的,因为夏令时在凌晨 2 点和凌晨 3 点之间切换,所以任何 DST 引入日凌晨 2 点到 3 点之间的所有时间值都是无效的。与“2016-03-13 02:32:21”等相同

将系统时区更改为不使用 DST 的时区,应该没问题。