语法错误或访问冲突:1067 'created_at' 的默认值无效

Posted

技术标签:

【中文标题】语法错误或访问冲突:1067 \'created_at\' 的默认值无效【英文标题】: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 是的,我删除了数据库 github.com/laravel/framework/issues/3602 【参考方案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);

成功了

【讨论】:

以上是关于语法错误或访问冲突:1067 'created_at' 的默认值无效的主要内容,如果未能解决你的问题,请参考以下文章

为啥 laravel 迁移的时间戳('my_col_name')返回语法错误或访问冲突:1067 'my_col_name' 的默认值无效

插入记录时出现语法错误或访问冲突

CakePHP 语法错误或访问冲突

SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误 - LARAVEL

Cakephp SQLSTATE [42000]:语法错误或访问冲突:1064

Laravel 5.8 SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误