语法错误或访问冲突: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 uniqueusers_email_unique
(
我在AppServiceProvider.php
上添加以下代码
public function boot()
Schema::defaultStringLength(191); //Solved by increasing StringLength
然后告诉我这个错误
[照亮\数据库\查询异常] SQLSTATE[42000]:语法错误或访问冲突:1067 'created_at' 的默认值无效(SQL:创建表
password_resets
(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' 的默认值无效
SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误 - LARAVEL