在 make:auth 之后迁移 Laravel 时出错

Error in migrating Laravel after make:auth

我正在努力学习Laravel 5.4。在我发布命令 php artisan make:auth 并发布命令 php artisan migrate 后,会显示以下错误并且一些数据库表不会变大:

[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table users add unique users_email_unique(email)) [PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

关于我需要使用一些列作为具有 Persian Script Font 字符的容器这一事实(其他一些列包含英语、西班牙语......字符),我创建了 MySQL 数据库utf8_general_ci 并且我认为错误是由于数据库的编码而引发的。您能否告诉我 character encoding 我将使用什么来构建数据库以便能够利用 Laravel 的 Auth 功能?非常感谢您。

让我们看看 SHOW CREATE TABLE 这样我们就可以看到 email.

的定义

同时,我猜它包括类似

的内容
email VARCHAR(255) CHARACTER SET utf8mb4,
INDEX(email)

做其中之一(每个都有其缺点):

  • 255 -> 191(但请确保您目前没有更长的地址)
  • utf8mb4 -> utf8(因此不允许表情符号和一些汉字)
  • INDEX(email(20))(如果是 UNIQUEPRIMARY KEY,请 不要 选择此选项)
  • 可以重新配置(如果在 5.6.3 之后)服务器和 table 以允许更大的索引;这不是 'default' 直到 5.7.7.

Laravel 5.4 有一个关于此错误的 documented 问题。

对于 运行 遇到此问题的其他人,这也是一个很好的解决方法:

  1. 打开你的app\Provider\AppServiceProvider.php
  2. 改为:

    <?php
    
    namespace App\Providers;
    
    use Illuminate\Support\Facades\Schema;
    use Illuminate\Support\ServiceProvider;
    
    class AppServiceProvider extends ServiceProvider
    {
    /**
    * Bootstrap any application services.
    *
    * @return void
    */
    public function boot()
    {
    Schema::defaultStringLength(191); //
    }
    
    /**
    * Register any application services.
    *
    * @return void
    */
    public function register()
    {
    //
    }
    }
    
  3. 运行再次迁移