如何将CONSTRAINT UNIQUE添加到包含比默认字符多的字符的列

时间:2016-07-31 08:21:54

标签: mysql constraints alter

我想为标题,语言和下载(3列)的列添加唯一。因为我没有其他选项来摆脱重复的条目。这是代码:

ALTER TABLE datapdf ADD CONSTRAINT tb_uq UNIQUE (title, language, download);

但是我收到了这个错误:

1071 - 指定密钥太长;最大密钥长度为1000字节

这有什么解决方案吗?但请记住,它应该与这三列匹配。

1 个答案:

答案 0 :(得分:1)

看来你的这三栏'长度太长了,我做了一个测试,看看它。

drop table if exists datapdf;
create table datapdf 
(
title varchar(200),
 language varchar(300), 
 download varchar(510)
);

ALTER TABLE datapdf ADD CONSTRAINT tb_uq UNIQUE (title, language, download);

我收到的错误与您的错误相同。

Error Code: 1071. Specified key was too long; max key length is 767 bytes

但是如果我改变表datapdf的结构,它就会成功运行。

drop table if exists datapdf;
create table datapdf 
(
title varchar(100),
 language varchar(100), 
 download varchar(100)
);

ALTER TABLE datapdf ADD CONSTRAINT tb_uq UNIQUE (title, language, download);

这是Action

ALTER TABLE datapdf ADD CONSTRAINT tb_uq UNIQUE (title, language, download)

所以我认为你可以改变你的表格结构(如果可能的话)来解决这个问题。然而,它不是一个好的解决方案,因为你可能会丢失你的数据@NB所说的最好的解决方案之一(这个问题的第一个评论):"
添加第四列。保存3列的哈希值。使列唯一。"