laravel 5.5 數據庫報錯 Syntax error or access violation: 1071 Specified key was too long; max key length

報錯信息php

[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes (SQL: alter table `users` add unique `users_email_unique`(`email
`))app

 網友給出緣由ide

原來,Laravel 5.4+默認使用utf8mb4字符編碼,而不是以前的utf8編碼。所以在運行php artisan migrate 會報出錯誤。編碼

  MySql支持的utf8編碼最大字符長度爲3字節,若是遇到4字節的寬字符就會出現插入異常。三個字節UTF-8最大能編碼的Unicode字符是0xffff,即Unicode中的基本多文種平面(BMP)。於是包括Emoji表情(Emoji是一種特殊的Unicode編碼)在內的非基本多文種平面的Unicode字符都沒法使用MySql的utf8字符集存儲。spa

  這也應該就是Laravel 5.4+改用4字節長度的utf8mb4字符編碼的緣由之一。不過要注意的是,只有MySql 5.5.3版本之後纔開始支持utf8mb4字符編碼(查看版本:selection version();)。若是MySql版本太低,須要進行版本更新。code

 解決辦法:修改/app/providers/AppServiceProvider.php文件(紅色字)server

<?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()
    {
        \App\Models\User::observe(\App\Observers\UserObserver::class);
        \App\Models\Project::observe(\App\Observers\ProjectObserver::class);
        Schema::defaultStringLength(191);
    }

}
相關文章
相關標籤/搜索