当我使用laravel migration在数据库中创建表时,我遇到了这个问题。当我在以前的系统上使用相同的命令时,我不知道它可能有什么问题。这是我在使用composer创建表时遇到的错误。
$ php artisan migrate迁移表已成功创建。
[Illuminate \ Database \ QueryException] SQLSTATE [42000]:语法错误 或访问冲突:1071指定密钥长;最大键 长度为767字节(SQL:alter table
users
添加唯一users_email_unique
([PDOException] SQLSTATE [42000]:语法错误或访问冲突: 1071指定密钥长;最大密钥长度为767字节
答案 0 :(得分:2)
字符限制取决于您使用的字符集。 Laravel
正在使用utf8mb4
,其中最大索引的字符数限制为191
。
您只需将字符数限制设置为正确的限制即可。从中读取 Laravel Index Length
索引长度& MySQL / MariaDB
Laravel默认使用
utf8mb4
字符集,其中包括 支持存储" emojis"在数据库中。如果你正在运行 早于MySQL
版本的5.7.7
版本或早于MariaDB
版本的10.2.2
版本Schema::defaultStringLength
版本,您可能需要手动配置默认值 迁移生成的字符串长度,以便MySQL创建 他们的索引。您可以通过调用来配置它AppServiceProvider
中的use Illuminate\Support\Facades\Schema; /** * Bootstrap any application services. * * @return void */ public function boot() { Schema::defaultStringLength(191); }
方法:
innodb_large_prefix
或者,您可以为您启用
return collect($cache->remember($key, $minutes, $callback));
选项 数据库。有关说明,请参阅数据库的文档 如何正确启用此选项。
答案 1 :(得分:1)
这是Laravel 5.4中的一个错误
要修复它,请将其置于Schema :: create方法调用上方:
Schema::defaultStringLength(191);
在这里阅读更多内容: