[已解决]
我想创建多个唯一的列,但是当我运行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');
});
然后重新迁移,一切都很好。
答案 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');
});