流明5.6迁移错误指定的密钥太长,最大密钥长度为767字节

时间:2018-07-04 09:01:48

标签: php mysql database laravel lumen

我使用Lumen 5.6和mysql。当我输入“ php artisan migration”时,会发生以下错误:

SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was t  
oo long; max key length is 767 bytes (SQL: alter table `users` add unique `  
users_email_unique`(`email`))  

我将以下代码放入AppServiceProvider的“启动”方法中

Schema::defaultStringLength(191);

但是我没有取得任何成功。

6 个答案:

答案 0 :(得分:9)

您只需要再走一步

转到bootstrap文件夹中的app.php并取消注释或修改此行

Z

此代码

`mysql.createPool({
  connectionLimit: mySQLConfig.connectionLimit,
  host: mySQLConfig.host,
  user: mySQLConfig.username,
  password: mySQLConfig.password,
  database: mySQLConfig.database,
  timezone: 'Z'
});`

祝你有美好的一天

答案 1 :(得分:7)

use Illuminate\Support\Facades\Schema; //AppServiceProvider.php

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

//rollback your migration or delete all table from database then migrate again.

答案 2 :(得分:4)

转到文件database.php中的配置,然后编辑

'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',

'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',

答案 3 :(得分:3)

您需要做几件事。我也遇到了这个问题,并按照以下两个步骤进行了修复

  1. 转到引导目录中的app.php并取消注释或修改此行。

    // $app->register(App\Providers\AppServiceProvider::class);
    
  2. 现在您需要在boot()文件中定义AppServiceProvider函数

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

那你很好去!

答案 4 :(得分:2)

  1. 在bootstrap / app.php中取消注释此行:
$app->register(App\Providers\AppServiceProvider::class);
  1. 在app / AppServiceProvider.php中,将以下公共功能添加到AppServiceProvider类中:
public function boot()
  {
    Schema::defaultStringLength(191);
  }

答案 5 :(得分:-1)

已知在Laravel / Lumen 7.x中工作:

我尝试过对AppServiceProvider::class和上面提到的其他解决方案不加注释,但是以下内容对我有用。

如果您在/vendor/laravel/lumen-framework/config/database.php中查找charsetcollation,则代码会检查您的.env文件并诉诸utf8mb4utf8mb4_unicode_ci,分别。

如果您数据库的字符集设置为utf8,而排序规则设置为utf8_unicode_ci,只需将以下内容添加到.env文件中:

# .env
...
DB_CHARSET=utf8
DB_COLLATION=utf8_unicode_ci
...