为啥 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 迁移错误?

为啥在使用 migrate:fresh 或其他时在 laravel 应用程序迁移中删除了迁移

Laravel 数据透视表时间戳

laravel框架的数据迁移 (摘取)

laravel框架之数据迁移和数据填充