语法错误或访问冲突:1071 指定的密钥太长;最大密钥长度为 767 字节 [重复]

Posted

技术标签:

【中文标题】语法错误或访问冲突:1071 指定的密钥太长;最大密钥长度为 767 字节 [重复]【英文标题】:Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes [duplicate] 【发布时间】:2018-09-15 06:41:34 【问题描述】:

我的 php 项目有一个迁移文件。我收到此错误

语法错误或访问冲突:1071 指定的键太长;最大限度 密钥长度为 767 字节

我明白这个问题是由于 varchar(512) 和 charset - UTF8 造成的,但我该如何解决这个问题?我无法更改我的迁移脚本。 mysql的my.ini中的一些属性可以修改吗?

CREATE TABLE if not exists usermaster (
  user_id bigint(20) NOT NULL,
  username varchar(512) NOT NULL,
  PRIMARY KEY (user_id,username),
   KEY fk_um_idx (user_id),
  CONSTRAINT fk_um_idx FOREIGN KEY (user_id) REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

【问题讨论】:

你能升级到 MySQL 5.7 忘了说我已经把 MySQL 更新到 10.1.31 否则我必须将表格的字符集从 utf8mb4 更改为 utf8 @Sinto 我无法更改脚本 ?? MySQL to 10.1.31 我想你的意思是说你使用的是mariaDB 而不是 MySQL 【参考方案1】:

如果您坚持将用户名的长度保持在 512,以下关于重复主题的评论提供了 2 种可能性:https://***.com/a/41298282/5987517

我认为在我们的案例中最好的解决方案是将您的编码从 UTF-8 更改为 latin1_general_ci

【讨论】:

以上是关于语法错误或访问冲突:1071 指定的密钥太长;最大密钥长度为 767 字节 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE[42000]:语法错误或访问冲突:1071 指定的键太长;最大密钥长度为 767 字节

Laravel 迁移错误:语法错误或访问冲突:1071 指定的键太长;最大密钥长度为 767 字节 laravel 5.3

Symfony 3.4.4 + MariaDB 10.0.1 - SQLSTATE [42000]:语法错误或访问冲突:1071 指定的密钥太长;最大密钥长度为 767 字节

Laravel 5.4:指定的密钥太长错误[重复]

Laravel: Mediable migration error 语法错误或访问冲突:1071 Specified key was too long;最大密钥长度为 1000 字节

为啥会出现此错误 #1071 - 指定的密钥太长;最大密钥长度为 1000 字节? [复制]