laravel 5.4迁移无法正常工作

时间:2017-05-06 23:57:22

标签: php laravel-5 laravel-5.4

当我使用laravel migration在数据库中创建表时,我遇到了这个问题。当我在以前的系统上使用相同的命令时,我不知道它可能有什么问题。这是我在使用composer创建表时遇到的错误。

  

$ php artisan migrate迁移表已成功创建。

     

[Illuminate \ Database \ QueryException] SQLSTATE [42000]:语法错误   或访问冲突:1071指定密钥长;最大键   长度为767字节(SQL:alter table users添加唯一 users_email_uniqueemail))

     

[PDOException] SQLSTATE [42000]:语法错误或访问冲突:   1071指定密钥长;最大密钥长度为767字节

2 个答案:

答案 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);

在这里阅读更多内容:

https://github.com/laravel/framework/issues/17508