MySQL修改了"默认"和"额外"时间戳字段的值

时间:2016-01-02 21:14:40

标签: mysql laravel

我使用Laravel迁移来创建users表。它包含使用created_at

创建的updated_at$table->timestamps();字段

生成的表结构如下所示;

enter image description here

为什么两个时间戳字段都有默认值?就我而言,Laravel迁移$table->timestamps();没有设置时间戳的默认值。

此外,created_at字段"额外"已设置为on update CURRENT_TIMESTAMP。我也不认为Laravel的迁移也是如此。

有谁知道MySQL为什么会这样做?我顺便使用 MySQL 5.7.10

更新:自Laravel v5.2.24起,默认情况下,时间戳已设为可为空,因此这不再是问题 - commit

1 个答案:

答案 0 :(得分:1)

这与MySQL版本和严格模式之间的差异有关,特别是< = 5.6和5.7,因为默认情况下现在启用严格模式。见https://github.com/laravel/framework/issues/11518

现在的解决方案似乎是使用$table->nullableTimestamps()或手动定义created_atupdated_at列,如下所示

$table->timestamp('created_at')->useCurrent();
$table->timestamp('updated_at')->useCurrent();