【问题标题】:Lumen 5.6 Migrate Error Specified key was too long max key length is 767 bytesLumen 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);

但我没有取得任何成功。

【问题讨论】:

    标签: php mysql database laravel lumen


    【解决方案1】:

    你只需要多一步

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

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

    到这个代码

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

    祝你有美好的一天

    【讨论】:

      【解决方案2】:

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

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

        // $app->register(App\Providers\AppServiceProvider::class);
        
      2. 现在你需要在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】:
        1. 在 bootstrap/app.php 中取消注释这一行:
        $app->register(App\Providers\AppServiceProvider::class);
        
        1. 在 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
          ...
          

          【讨论】:

            猜你喜欢
            • 2012-06-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-08-26
            • 2019-04-09
            • 1970-01-01
            相关资源
            最近更新 更多