【问题标题】:Syntax error or access violation: 1067 Invalid default value for 'created_at'语法错误或访问冲突:1067 'created_at' 的默认值无效
【发布时间】:2018-02-06 16:08:15
【问题描述】:

我安装 laravel 5.5 并且当我运行 php artisan migrate 时显示此错误

[照亮\数据库\查询异常] SQLSTATE[42000]:语法错误或访问冲突:1071 指定的键太长;最大密钥长度为 767 字节(SQ L:alter table users add unique users_email_unique(email))

我在AppServiceProvider.php上添加以下代码

 public function boot()
{
     Schema::defaultStringLength(191); //Solved by increasing StringLength
}

然后告诉我这个错误

[照亮\数据库\查询异常] SQLSTATE[42000]:语法错误或访问冲突:1067 'created_at' 的默认值无效(SQL:创建表 password_resets (email varchar(191) not null,token varchar(191) not null,@987654331 @timestamp 不为空)de 错误字符集 utf8mb4 整理 utf8mb4_unicode_ci)

【问题讨论】:

  • 设置defaultStringLength后,你回滚(删除)表了吗?
  • 你的mysql版本是什么
  • 你删除了旧的数据库内容吗?
  • @JigarShah 是的,我删除了数据库

标签: php mysql laravel laravel-5


【解决方案1】:

您可以使用nullableTimestamps() 代替timestamps()

$table->timestamp('created_at')->default(\DB::raw('CURRENT_TIMESTAMP'));

还要检查数据库服务器版本

请查看这些参考链接:

https://github.com/laravel/framework/issues/3602

https://laracasts.com/discuss/channels/forge/syntax-error-or-access-violation-1067-invalid-default-value-for-created-at

【讨论】:

    【解决方案2】:

    我目前正在使用 laravel 7。

    我只是去config/database.php

    那我把strict => true改成strict => false

    然后再次运行相同的迁移。它有效。

    【讨论】:

      【解决方案3】:

      我的情况

              $table->timestamp('deleted_at')->nullable()->default(null);
      

      成功了

      【讨论】:

        猜你喜欢
        • 2021-04-15
        • 1970-01-01
        • 1970-01-01
        • 2016-08-21
        • 2021-07-21
        • 1970-01-01
        • 2018-07-06
        • 2019-07-15
        • 1970-01-01
        相关资源
        最近更新 更多