1292 列 'updated_at' 的日期时间值不正确
1292 Incorrect datetime value for column 'updated_at'
我在 Laravel 中创建了一个带有标准日期时间列的 table:
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 点?
您似乎在美国,所在时区 daylight saving time just started。
因此,今天凌晨 2 点不存在。
March 8th, 2020 - Daylight Saving Time Starts
When local standard time is about to reach
Sunday, March 8th, 2020, 02:00:00 clocks are turned forward 1 hour to
Sunday, March 8th, 2020, 03:00:00 local daylight time instead.
Sunrise and sunset will be about 1 hour later on March 8th, 2020 than the day before.
There will be more light in the evening.
MySQL 中的 DATETIME
使用当地时间(时区可以通过多种方式设置),在您的情况下,它可能是 您的 本地时间时间,这就是为什么你 运行 进入这个问题。如果您实际上是指 UTC,则必须先使用 SET time_zone = "+00:00"
或设置正确的 global configuration.
将时区设置为 UTC
由于您的 PHP 库正在生成此(无效)时间,我假设您在 PHP 和 MySQL 使用的时区之间存在不匹配。
我在 Laravel 中创建了一个带有标准日期时间列的 table:
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 点?
您似乎在美国,所在时区 daylight saving time just started。
因此,今天凌晨 2 点不存在。
MySQL 中的March 8th, 2020 - Daylight Saving Time Starts
When local standard time is about to reach
Sunday, March 8th, 2020, 02:00:00 clocks are turned forward 1 hour to
Sunday, March 8th, 2020, 03:00:00 local daylight time instead.Sunrise and sunset will be about 1 hour later on March 8th, 2020 than the day before. There will be more light in the evening.
DATETIME
使用当地时间(时区可以通过多种方式设置),在您的情况下,它可能是 您的 本地时间时间,这就是为什么你 运行 进入这个问题。如果您实际上是指 UTC,则必须先使用 SET time_zone = "+00:00"
或设置正确的 global configuration.
由于您的 PHP 库正在生成此(无效)时间,我假设您在 PHP 和 MySQL 使用的时区之间存在不匹配。