早上好。mysql 5.7.25:
insert into mytable values('2019-03-31 02:06:29')
Run Code Online (Sandbox Code Playgroud)
返回错误“#1292 日期时间值不正确”
但:
insert into mytable values('2019-03-31 03:06:29')
Run Code Online (Sandbox Code Playgroud)
没有错误返回。(字段类型为时间戳)
我哪里错了?
谢谢
奇科
如果这给你一个错误:
insert into mytable values('2019-03-31 02:06:29')
Run Code Online (Sandbox Code Playgroud)
但这不会:
insert into mytable values('2019-03-31 03:06:29')
Run Code Online (Sandbox Code Playgroud)
您最有可能使用类似 EU 的时区,尤其是 CET(我强烈建议不要在数据库上使用 tz,而只使用 UTC,这样更容易)。欧盟(和其他国家/地区)将时钟从那个星期日凌晨 2 点更改为凌晨 3 点以进行夏季调整,因此如果使用这样的 TZ,则无法插入“2019-03-31 02:XX:XX”数据,因为此类数据对该时区无效。
做:
SELECT @@time_zone;
Run Code Online (Sandbox Code Playgroud)
要知道您使用的是哪个时区。如果它说 SYSTEM,请在 os.h 上检查它。
修复:不要插入它,那个时钟时间不存在,它发生在 2 点之前或 3 点之后。或者修复您的数据库或操作系统的时区以匹配您尝试插入的时区。
正确修复:不要处理数据库上的时区(永远不要尝试自己实现),只在演示时执行,并在应用程序后端使用 UTC。将您的服务器也设置为使用 UTC。
| 归档时间: |
|
| 查看次数: |
12282 次 |
| 最近记录: |