0

我正在努力学习Laravel 5.4。在我发布命令php artisan make:auth并发布命令后,php artisan migrate将显示以下错误,并且某些数据库表没有得到很好的处理:

[Illuminate\Database\QueryException]
SQLSTATE[42000]:语法错误或访问冲突:1071 指定的键太长;最大密钥长度为 767 字节(SQL:alter table users add unique users_email_unique( email))[PDOException]
SQLSTATE[42000]:语法错误或访问冲突:1071 指定的密钥太长;最大密钥长度为 767 字节

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

4

2 回答 2

1

让我们看看SHOW CREATE TABLE,这样我们就可以看到 的定义email

同时,我猜它包括类似的东西

email VARCHAR(255) CHARACTER SET utf8mb4,
INDEX(email)

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

  • 255 -> 191(但请确保您当前没有更长的地址)
  • utf8mb4 -> utf8(因此不允许表情符号和一些汉字)
  • INDEX(email(20)) (如果是UNIQUEPRIMARY KEY,请不要选择此选项)
  • 可以重新配置(如果在 5.6.3 之后)服务器和表以允许更大的索引;这不是 5.7.7 之前的“默认”。
于 2017-02-09T00:36:36.707 回答
1

Laravel 5.4 对此错误有一个记录在案的问题。

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

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

于 2017-02-13T01:09:54.773 回答