PHP Laravel迁移SQL问题

时间:2018-05-11 00:06:50

标签: php sql laravel

当我在我的laravel项目中的cmd上执行 php artisan migrate 时。我收到以下错误。请帮忙。enter image description here

3 个答案:

答案 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 documentation说明以下

  

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();