You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8.6执行PHP Artisan Migrate报SQLSTATE[42000]错误如何解决

问题根因

该报错是MariaDB严格模式下timestamp类型字段的规则限制导致的:当MariaDB开启严格模式时,所有声明为NOT NULL的字段必须显式指定默认值,否则就会抛出1067无效默认值错误。你代码里的created_date、modified_date都是NOT NULL的timestamp类型,但没有设置默认值,所以触发生成SQL时报错。

可行解决方案

结合你要求所有字段不可为空的业务规则,可选择以下任意一种方案修改迁移文件:

  • 方案1:设置默认值为当前时间(最推荐,符合通用业务逻辑)
    给两个timestamp字段添加useCurrent()默认值,修改后代码如下:
    $table->timestamp('created_date', $precision = 0)->useCurrent();
    $table->timestamp('modified_date', $precision = 0)->useCurrent()->useCurrentOnUpdate();
    
    该方案无需手动赋值时间字段,插入、更新数据时数据库会自动填充对应时间,完全符合创建时间、修改时间的常规使用需求。
  • 方案2:调整字段类型为datetime(无需修改数据库配置)
    如果你业务不需要timestamp的自动时区转换特性,可以把字段类型改为datetime,无需设置默认值也不会触发报错:
    $table->datetime('created_date', $precision = 0);
    $table->datetime('modified_date', $precision = 0);
    
  • 方案3:关闭MariaDB严格模式(仅临时兼容老代码使用,不推荐生产环境)
    打开XAMPP中MariaDB的配置文件my.ini,找到sql_mode配置项,删除其中的STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE三个参数,重启MariaDB服务后再执行迁移即可。该方案会降低数据库数据校验严格度,存在脏数据写入风险。

内容的提问来源于stack exchange,提问作者Lucas Futami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 17:06:04