首页 文章

Laravel 5.4:指定密钥错误太长

提问于
浏览
0

我使用laravel migrate命令时遇到问题 . 表明 :

SQLSTATE [42000]:语法错误或访问冲突:1071指定密钥太长;最大密钥长度为1000字节(SQL:alter table users添加唯一users_email_unique(email))

但是我的mysql版本是5.7.14而我的字符集是:

mysql> show variables like "%char%";
+--------------------------+-------------------------------------------------+
| Variable_name            | Value                                           |
+--------------------------+-------------------------------------------------+
| character_set_client     | utf8mb4                                         |
| character_set_connection | utf8mb4                                         |
| character_set_database   | utf8mb4                                         |
| character_set_filesystem | binary                                          |
| character_set_results    | utf8mb4                                         |
| character_set_server     | utf8mb4                                         |
| character_set_system     | utf8                                            |
| character_sets_dir       | D:\wamp64\bin\mysql\mysql5.7.14\share\charsets\ |
+--------------------------+-------------------------------------------------+

因此,医生说不应该有任何问题 . 有人可以帮帮我吗?

3 回答

  • 4

    错误消息中提到的 1000 bytes 指向您的存储引擎是MyISAM而不是InnoDB . 与5.7.7中密钥长度相关的MySql更改特定于InnoDB引擎 .

    您需要将表移动到InnoDB存储引擎,或者如果必须使用MyISAM,则需要使用in the documentation提到的 Schema::defaultStringLength(191); 语句 .

    // AppServiceProvider
    
    use Illuminate\Support\Facades\Schema;
    
    public function boot()
    {
        Schema::defaultStringLength(191);
    }
    
  • 2

    对于最新版本的MySQL 5.7.7或更高版本,您不会收到任何错误,但对于任何laravel版本的以下版本,您需要在文件中添加一行 AppServiceProvider.php 放置在 app/Providers/AppServiceProvider.php

    您需要更新如下:

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

    请不要忘记添加该行

    use Illuminate\Support\Facades\Schema;
    

    在文件的顶部 .

    参考下面的博客:https://laravel-news.com/laravel-5-4-key-too-long-error

  • 0

    接近这个工作是通过第二个param与关键名称(一个短的):

    $table->string('email')->unique(null,'email');
    

相关问题