首页 > 解决方案 > 为什么我在 laravel 迁移中得到指定的密钥太长?

问题描述

在 laravel 8 / mysql 5.7 中使用索引定义表:

Schema::create('community', function (Blueprint $table) {
    $table->id();
    $table->string('question_title', 1000);
    $table->string('question_slug', 1005)->unique();

    $table->boolean('status')->default(false);
    $table->unsignedTinyInteger('question_point')->default(0);

    ...
    $table->index(['status', 'question_title'], 'community_status_question_title_index');
});

我得到错误:

  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 3072 bytes (SQL: alter table `community` add index `community_status_question_title_index`(`status`, `question_title`))

我想知道为什么 3072 的限制被打破了,因为 question_title 有 1000 个字符的长度并且状态是 bool 以及如何修复它?

修改:我从poinetd分支获得决定,但在文件中添加:/app/Providers/AppServiceProvider.php

use Illuminate\Support\Facades\Schema;

public function boot()
{
    Schema::defaultStringLength(191);
}

我试图修改值:

Schema::defaultStringLength(2000);

但无论如何都得到了同样的错误......

谢谢!

标签: mysqllaravel

解决方案


推荐阅读