答案 0 :(得分:3)
laravel 5.4.* file location : app/Providers/AppServiceProvider.php
AppServiceProvider.php已修改
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(191);
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
之后执行migrate Artisan命令:
php artisan migrate
答案 1 :(得分:1)
您可能正在进入索引长度配置。
Laravel默认使用utf8mb4字符集,其中包括支持存储" emojis"在数据库中。如果您运行的是早于5.7.7版本的MySQL版本或早于10.2.2版本的MariaDB,您可能需要手动配置迁移生成的默认字符串长度,以便MySQL为它们创建索引。您可以通过在AppServiceProvider中调用Schema :: defaultStringLength方法来配置它:
use Illuminate\Support\Facades\Schema;
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(191);
}
答案 2 :(得分:0)
由于电子邮件正在使用unique()
而发生错误,但它不知道您的唯一值有多长。您有两种方法可以解决此问题
第一个在 App \ Providers \ AppServiceProvider.php 中设置为global,然后在boot方法中添加代码:
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
第二个只在您的迁移表中设置,您只需要指定字符串的长度,如:
$table->string('email', 191)->unique();