mysql - 1292 列“updated_at”的日期时间值不正确
问题描述
我在 Laravel 中创建了一个带有标准日期时间列的表:
Schema::create('lists', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('ref');
$table->string('provider');
$table->timestamps();
$table->softDeletes();
$table->unique(['provider', 'ref']);
});
当我尝试用 Eloquent 创建一个简单的记录时:
List::updateOrCreate([
'provider' => 'test',
'ref' => 'S4d3g'
], [
'name' => 'Plan'
]);
我收到此消息(这是原始控制台输出,因此请忽略缺少引号):
SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '2020-03-08 02:25:07' for column 'updated_at' at row 1 (SQL: insert into `lists` (`provider`, `ref`, `name`, `updated_at`, `created_at`) values (test, S4d3g, Plan, 2020-03-08 02:25:07, 2020-03-08 02:25:07))
在数据库上手动运行查询作为原始 SQL 也不起作用:
insert into `lists` (`provider`, `ref`, `name`, `updated_at`, `created_at`) values ('test', 'S4d3g', 'Plan', '2020-03-08 02:25:07', '2020-03-08 02:25:07')
我正在使用 MySQL 5.7。
莫名其妙地,如果我将日期更改为凌晨 2 点以外的任何时间,它都会起作用:
insert into `lists` (`provider`, `ref`, `name`, `updated_at`, `created_at`) values ('test', 'S4d3g', 'Plan', '2020-03-08 01:25:07', '2020-03-08 01:25:07')
insert into `lists` (`provider`, `ref`, `name`, `updated_at`, `created_at`) values ('test', 'S4d3g', 'Plan', '2020-03-08 03:25:07', '2020-03-08 03:25:07')
什么可能导致这种奇怪的 MySQL 级别不喜欢时间戳上的 2 AM?
解决方案
您似乎在美国,处于夏令时刚刚开始的时区。
因此,今天不存在凌晨 2 点。
2020 年 3 月 8 日 - 夏令时开始
当当地标准时间即将到达
2020 年 3 月 8 日(星期日)时,02:00:00 时钟将调快 1 小时至
2020 年 3 月 8 日(星期日)03:00:00 当地时间。2020年3月8日的日出和日落将比前一天晚约1小时。晚上会有更多的光线。
DATETIME
在 MySQL 中使用本地时间(时区可以通过多种方式设置),在您的情况下,它可能是您的本地时间,这就是您遇到此问题的原因。如果您实际上是指UTC,则必须首先使用SET time_zone = "+00:00"
或通过设置正确的全局配置将时区设置为 UTC 。
由于您的 PHP 库正在生成这个(无效)时间,我假设您在 PHP 和 MySQL 使用的时区之间存在不匹配。
推荐阅读
- c++ - 运行命令“rosbag play example.bag”时发生错误。找不到与插件 rosbag/NoEncryptor 对应的库
- microsoft-graph-api - 如何使用 Graph API 获取所有 Azure AD b2c 用户的个人资料图片
- php - php strtotime 函数没有给出输出
- firebase - 如何持久化 Firebase UserCredential 对象,因此可以使用 UserCredential.sendEmailVerification() 函数
- html - 形成动作=“/登录”?斜线是什么意思?
- python - pyproj 意外返回 nan 方位角(方位角)
- reactjs - 如何测量 useCallback 和 useMemo 性能
- ruby-on-rails - 多对多关联上的 Rails 路由和浅嵌套表单
- javascript - Javascript - 当我点击输入时,关联的对象会自行删除
- docker - Docker run --volume 不断创建随机卷而不使用指定的卷