rdsbai
rdsbai
发布于 3个月前

Laravel 使用 MySQL 7 数据库遇到 Invalid default value for 'created_at'

服务器升级 MySQL 5.7 下,老项目 Laravel 5.1 的数据库表结构修改时会遇到:

Invalid default value for 'created_at'

那是因为 MySQL 5.7 在 strict 模式开启时,不允许 0000-00-00 作为 timestamp 的默认值,而在 Laravel 5.3 以下,默认 strict 是开启的。

在新创建的 Migration 中,使用:

$table->nullableTimestamps()

来替代之前的 timestamps()。单独的时间字段使用:

$table->->timestamp()->useCurrent();

或者:

$table->->timestamp('xxx')->nullable();

对于已经存在的数据库,可以使用以下 SQL 直接修正(注意把 users 改为你的数据库表):

ALTER TABLE `users` 
    CHANGE created_at created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
    CHANGE updated_at updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL;