UNIQUE INDEX - 指定的键太长;最大密钥长度为 767 字节 [重复]

Posted

技术标签:

【中文标题】UNIQUE INDEX - 指定的键太长;最大密钥长度为 767 字节 [重复]【英文标题】:UNIQUE INDEX - Specified key was too long; max key length is 767 bytes [duplicate] 【发布时间】:2017-12-30 10:43:12 【问题描述】:

我需要将 url 保存到一个 mysql 表中,我还需要通过它们的 url 搜索行。为了提高性能,我想为 url 列添加唯一索引。

CREATE TABLE `fp_feeds_in_records` (
  `id` bigint auto_increment NOT NULL,
  `url` varchar(1000) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  unique unique_url (val)
) ENGINE=InnoDB

但是当我运行 CREATE 语句时,我收到错误消息:Error Code: 1071. Specified key was too long; max key length is 767 bytes。 我需要保存的网址太长,所以我不能像其他答案所暗示的那样使用 varchar(255) 。 MySQL 版本是 5.6.35。

我该如何解决?

【问题讨论】:

【参考方案1】:

不幸的是,没有真正的解决方案。您唯一的选择是减小列的大小、使用不同的字符集(如 UTF-8)或使用不同的引擎(如 MYISAM)。在这种情况下,我将字符集切换为 UTF-8,从而将最大密钥长度提高到 255 个字符。

【讨论】:

以上是关于UNIQUE INDEX - 指定的键太长;最大密钥长度为 767 字节 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL 错误 #1071 - 指定的键太长;最大密钥长度为 767 字节

Mysql Entity Framework 问题 - 指定的键太长;最大密钥长度为 3072 字节

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

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

markdown SQLSTATE [42000]:迁移命令时指定的键太长错误

MySQL - 错误 1071 阻止更改字符集/排序规则,“指定的键太长......”