修复Laravel 5.4中的”指定密钥太长错误”异常

【修复Laravel 5.4中的” 指定密钥太长错误” 异常】从Laravel 5.4开始, 默认数据库字符集进行了一些更改。现在, 使用的默认字符集为utf8mb4, 其中包括对表情符号的支持。此问题会影响Exclusivelz新应用程序, 并且只要你运行的是MySQL> = v5.7.7, 就无需执行任何操作。此错误通常出现在MariaDB或旧版本的MySQL上, 特别是在迁移过程中触发的:

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

解决此错误的方法不依赖于工具本身(MariaDB), 而是依赖于你的代码。为了防止这种异常, 如Laravel的正式迁移指南中所述, 你只需在AppServiceProvider中指定字符串的默认长度, 只需导入Schema类并从启动函数上的类运行静态方法defaultStringLength即可:
use Illuminate\Support\Facades\Schema; public function boot(){Schema::defaultStringLength(191); }

例如, 在默认项目中, 你将在/yourapp/app/Providers/AppServiceProvider.php中找到此文件, 更改后该文件应类似于:
< ?php// . yourapp\app\Providers\AppServiceProvider.phpnamespace App\Providers; use Illuminate\Support\ServiceProvider; // 1. Import Schemause Illuminate\Support\Facades\Schema; class AppServiceProvider extends ServiceProvider{/*** Bootstrap any application services.** @return void*/public function boot(){// 2. Set default string lengthSchema::defaultStringLength(191); }/*** Register any application services.** @return void*/public function register(){//}}

如果再次运行迁移, 则不应再出现异常。
编码愉快!

    推荐阅读