首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel5.4:指定的键太长错误

Laravel5.4:指定的键太长错误
EN

Stack Overflow用户
提问于 2017-03-03 03:23:22
回答 6查看 6.3K关注 0票数 0

我在使用laravel迁移命令时有问题。它显示:

SQLSTATE42000:语法错误或访问冲突: 1071指定的键太长;最大键长度为1000个字节(SQL: alter users add unique users_email_unique(email))

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

代码语言:javascript
复制
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\ |
+--------------------------+-------------------------------------------------+

所以不应该像医生说的那样有任何问题。有人能帮我吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-03-03 04:07:28

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

您需要将表移动到InnoDB存储引擎,或者如果必须使用MyISAM,则需要使用提到的在文件中Schema::defaultStringLength(191);语句。

代码语言:javascript
复制
// AppServiceProvider

use Illuminate\Support\Facades\Schema;

public function boot()
{
    Schema::defaultStringLength(191);
}
票数 5
EN

Stack Overflow用户

发布于 2017-09-23 11:08:10

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

您需要更新如下内容:

代码语言:javascript
复制
public function boot()
{
    Schema::defaultStringLength(191);
}

请别忘了加一行

代码语言:javascript
复制
use Illuminate\Support\Facades\Schema;

在文件的顶部。

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

票数 7
EN

Stack Overflow用户

发布于 2019-07-27 11:57:34

设置Schema::defaultStringLength(191)并不总是有效的,也就是说,如果你使用望远镜。造成此错误的主要原因是mysql引擎。默认情况下,Laravel是为InnoDB配置的,您的数据库可能在默认情况下被配置为使用MyISAM。要正确地修复它,最好是编辑config\database.php并在mysql中修改配置

代码语言:javascript
复制
'engine' => null

代码语言:javascript
复制
'engine' => 'InnoDB'

参考文献:https://stackoverflow.com/a/37996097/6389945

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42570065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档