在使用Laravel5,配合MySQL5.7开发项目过程中,在执行 php artisan migrate 时,一直报错,报错内容是:

SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'created_at' (SQL: create table users (id int unsigned not null auto_increment primary key, ..... , created_at timestamp default 0 not null, updated_at timestamp default 0 not null) default character set utf8 collate utf8_unicode_ci)

执行migration文件不行,我就尝试从线上拷贝一份数据库文件下来,直接执行sql,发现还是报错。

最后各种查,才发现原因是:MySQL5.7不允许 timestamp 的默认值为0或者'0000-00-00 00:00:00'

解决方案:

1、linux系统中,/etc/mysql/my.cnf 文件添加一行:

sql_mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

2、windows系统中,my.ini 文件添加一行:

sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZE'

3、Laravel5项目中,修改 config/database.php 配置:

connections['mysql']['strict'] = false

记得修改完MySQL配置后,要重启服务才能生效。

本文为 陈华 原创,欢迎转载,但请注明出处:http://www.ichenhua.cn/read/18