【修复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(){//}}
如果再次运行迁移, 则不应再出现异常。
编码愉快!
推荐阅读
- Canvas.toBlob(Google Chrome 50和Firefox中Canvas的新功能)
- React国际化(i18n)入门
- 如何在React JSX中发表评论
- 处理XP下无法访问Windows7文件
- 处理Windows xp无法安装字体
- 教你进入WindowsXP系统后假死机的处理办法
- 分享运用Windows XP组策略局限访问电脑磁盘的最好办法
- 电脑在Windows XP系统下完成共享上网办法
- 取消Windows XP开始菜单文档运用记录