为啥 laravel 迁移的时间戳('my_col_name')返回语法错误或访问冲突:1067 'my_col_name' 的默认值无效
Posted
技术标签:
【中文标题】为啥 laravel 迁移的时间戳(\'my_col_name\')返回语法错误或访问冲突:1067 \'my_col_name\' 的默认值无效【英文标题】:why does laravel migration's timestapce('my_col_name') returns Syntax error or access violation: 1067 Invalid default value for 'my_col_name'为什么 laravel 迁移的时间戳('my_col_name')返回语法错误或访问冲突:1067 'my_col_name' 的默认值无效 【发布时间】:2019-07-15 08:48:10 【问题描述】:在我的迁移中,我有两个额外的时间戳
$table->timestamp('starts_at');
$table->timestamp('ends_at');
我不希望它们可以为空,问题是,当我运行 php artisan migrate 我回来了
语法错误或访问冲突:1067 'ends_at' 的默认值无效
我在底部有 $table->timestamps() 。 如何让我的自定义时间戳列/s 不能为空
一种解决方法是简单地将 nullable() 放在最后,但它不是一个修复。使用 laravel 5.7
【问题讨论】:
表中是否已有记录?如果是这样,您要么需要使这些时间戳为空,设置默认值,要么清空表然后迁移。 我在那个表中没有数据,它是在运行 php artisan make:migration my_migration_name 之后的新迁移 你可以用“dateTime”代替“timestamp”吗? 【参考方案1】:我希望您正在寻找该字段的日期时间数据类型。 试试下面的代码。
$table->datetime('starts_at');
$table->datetime('ends_at');
如果您想将此字段设为可为空,请尝试以下操作。
$table->dateTime('starts_at')->nullable();
$table->dateTime('ends_at')->nullable();
【讨论】:
正如我之前所说,我知道使用 nullable() 的方法我不想要破解,我想要一个解决方案或回答为什么它不起作用。【参考方案2】:你应该试试这个:
$table->timestamp('starts_at');
$table->timestamp('ends_at')->default('0000-00-00 00:00:00');
【讨论】:
OP 说使用 default() 不是他想要的,所以我假设你没有阅读完整的问题。以上是关于为啥 laravel 迁移的时间戳('my_col_name')返回语法错误或访问冲突:1067 'my_col_name' 的默认值无效的主要内容,如果未能解决你的问题,请参考以下文章
导入 csv excel 文件时,Laravel 7 时间戳迁移始终返回 0000-00-00 00:00:00
为啥我收到 Laravel php artisan 迁移错误?