報錯信息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); } }