我在Laravel中创建了一个包含标准datetime列的表:
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点时出现异常?
DATETIME
的一个令人讨厌的后果,因为它使用本地时区。(出于这个原因,我更喜欢TIMESTAMP
。)另外,考虑DST结束时会发生什么-有两个2:00,但在SQL中你无法区分2A:00和2B:00,所以要准备好! - CherryDT