【发布时间】:2021-03-13 20:38:56
【问题描述】:
我刚开始使用 Laravel (8),对如何正确修复这个错误有点困惑。
我已经看到了多个建议的解决方案here,但不认为接受的解决方案是更好的解决方案。
我试图在默认的 Laravel 项目上执行 php artisan migrate:fresh。我能够通过使用涉及为某些字段指定长度的解决方案来解决这个问题
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name', 50);
$table->string('email', 100)->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password', 24);
$table->rememberToken();
$table->timestamps();
});
接受的解决方案是修改Schema::defaultStringLength();。
这只是个人喜好吗?
编辑:我注意到文档中有一个额外的细节。
如果您运行的 MySQL 版本早于 5.7.7 版本或 MariaDB 版本早于 10.2.2 版本,您可能需要手动配置迁移生成的默认字符串长度,以便 MySQL 为其创建索引.您可以通过在 AppServiceProvider 中调用 Schema::defaultStringLength 方法来配置它:
我恰好使用的是 5.7.28 版
【问题讨论】:
-
设置 defaultStringLength 只是将其从默认值 255 调整为您设置的任何值,如果您愿意,您可以自己显式设置字段长度
-
如果您“不相信公认的解决方案是更好的解决方案”,那么还有 40 种其他方法可供选择。您希望在这里得到什么样的答案?