个性化阅读
专注于IT技术分析

修复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.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()
    {
        //
    }
}

如果再次运行迁移, 则不应再出现异常。

编码愉快!

赞(0)
未经允许不得转载:srcmini » 修复Laravel 5.4中的”指定密钥太长错误”异常

评论 抢沙发

评论前必须登录!