Lumen 5.6 Migrate Error Specified key was too long max key length is 767 bytes

Posted

技术标签:

【中文标题】Lumen 5.6 Migrate Error Specified key was too long max key length is 767 bytes【英文标题】: 【发布时间】:2018-12-12 15:56:24 【问题描述】:

我使用 Lumen 5.6 和 mysql。当我输入“php artisan migrate”时出现以下错误:

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

但我没有取得任何成功。

【问题讨论】:

【参考方案1】:

你只需要多一步

转到引导文件夹上的 app.php 并取消注释或修改此行

// $app->register(App\Providers\AppServiceProvider::class);

到这个代码

$app->register(App\Providers\AppServiceProvider::class);

祝你有美好的一天

【讨论】:

【参考方案2】:

你需要做几件事。我也遇到了这个问题并通过以下两个步骤修复了它

    进入 bootstrap 目录中的 app.php 并取消注释或修改此行。

    // $app->register(App\Providers\AppServiceProvider::class);
    

    现在你需要在AppServiceProviderfile 中定义boot()function

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

那你就可以走了!

【讨论】:

@MCFreddie777 很高兴知道我的回答对您有所帮助! :)【参考方案3】:

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

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

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

【讨论】:

这是次优解决方案,因为 utf8_unicode_ci 是一个有限的(到 3 个字节)字符集 我什至在我的 Lumen 项目中都没有看到这个文件。【参考方案4】:
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.

【讨论】:

【参考方案5】:
    在 bootstrap/app.php 中取消注释这一行:
$app->register(App\Providers\AppServiceProvider::class);
    在 app/AppServiceProvider.php 中添加下面的公共函数到AppServiceProvider 类:
public function boot()
  
    Schema::defaultStringLength(191);
  

【讨论】:

【参考方案6】:

已知在 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
...

【讨论】:

以上是关于Lumen 5.6 Migrate Error Specified key was too long max key length is 767 bytes的主要内容,如果未能解决你的问题,请参考以下文章

php artisan migrate 给我 Lumen 错误

Lumen 5.6:会话的替代方案

Lumen 5.6 - php artisan db:seed 出现错误“类 DatabaseSeeder 不存在”

Laravel 5.4 migrate时报错: Specified key was too long error

Laravel/Lumen - Artisan 控制台中缺少命令

如何在 Lumen 项目中使用 JSON API 资源?