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

时间:2017-02-08 09:21:40

标签: php mysql encoding laravel-5.4

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

  

[照亮\数据库\ QueryException]
  SQLSTATE [42000]:语法错误或访问冲突:1071指定密钥   太长了最大密钥长度为767字节(SQL:alter table users   添加唯一users_email_uniqueemail))[PDOException]
  SQLSTATE [42000]:语法错误或访问冲突:1071指定密钥   太长了最大密钥长度为767字节

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

2 个答案:

答案 0 :(得分:1)

让我们看看SHOW CREATE TABLE,以便我们看到email的定义。

与此同时,我猜它会包含类似

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

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

  • 255 - > 191(但请确保您目前没有更长的地址)
  • utf8mb4 - > utf8(从而禁止表情符号和一些汉字)
  • INDEX(电子邮件(20))(如果是UNIQUEPRIMARY KEY,请选择此选项)
  • 可以重新配置(如果在5.6.3之后)服务器和表以允许更大的索引;这不是“默认”,直到5.7.7。

答案 1 :(得分:1)

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. 再次运行迁移