Laravel 5.7迁移:密钥太长

时间:2018-12-16 16:34:06

标签: php laravel migration

[已解决]

我想创建多个唯一的列,但是当我运行php artisan migrate时,出现此错误:

  

SQLSTATE [42000]:语法错误或访问冲突:1071指定的密钥   太久了最大密钥长度为1000个字节

这是我的代码:

Schema::create('buku', function (Blueprint $table) {
        $table->increments('id');
        $table->string('judul');
        $table->string('pengarang');
        $table->string('penerbit');
        $table->string('thn_terbit',4);
        $table->integer('stok');
        $table->string('kategori');
        $table->timestamps();

        $table->unique(['judul','pengarang','penerbit','thn_terbit'],'unik');
    });

AppServiceProvider.php文件

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

答案将不胜感激

版本:Laravel 5.7

[已编辑]

对不起,我不好

我通过添加$table->engine = 'innoDB';解决了这一问题,因此代码如下所示:

Schema::create('buku', function (Blueprint $table) {
        $table->engine = 'innoDB';

        $table->increments('id');
        $table->string('judul');
        $table->string('pengarang');
        $table->string('penerbit');
        $table->string('thn_terbit');
        $table->integer('stok');
        $table->string('kategori');
        $table->timestamps();

        $table->unique(['judul','pengarang','penerbit','thn_terbit'],'unik');
    });

然后重新迁移,一切都很好。

2 个答案:

答案 0 :(得分:0)

app/Providers/AppServiceProvider.php文件中添加以下代码

use Illuminate\Support\Facades\Schema;

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

注意:启动方法已经存在,因此您只需要在其中添加Schema::defaultStringLength(191);,然后删除旧表并重新迁移即可。

答案 1 :(得分:0)

您正在尝试4列唯一索引。 4列的总和最多为191个字符。尝试每列47个字符。

Schema::create('buku', function (Blueprint $table) {
    $table->engine = 'innoDB';

    $table->increments('id');
    $table->string('judul', 47);
    $table->string('pengarang', 47);
    $table->string('penerbit', 47);
    $table->string('thn_terbit', 47);
    $table->integer('stok');
    $table->string('kategori');
    $table->timestamps();

    $table->unique(['judul','pengarang','penerbit','thn_terbit'],'unik');
});