从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.php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
// 1. Import Schema
use Illuminate\Support\Facades\Schema;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
// 2. Set default string length
Schema::defaultStringLength(191);
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
如果再次运行迁移, 则不应再出现异常。
编码愉快!
评论前必须登录!
注册