我想为标题、语言和下载(3列)添加唯一的列。因为我没有其他选择来消除重复的条目。这是代码:
ALTER TABLE datapdf ADD CONSTRAINT tb_uq UNIQUE (title, language, download);
但我得到了这个错误:
1071-指定的密钥太长;最大密钥长度为1000字节
有什么解决办法吗?但请记住,它应该通过这三列匹配。
你这三列的长度似乎太长了,我做了一个测试,看看。
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)
因此,我认为您可以更改表的结构(如果可能的话)来解决这个问题但是这不是一个好的解决方案,因为您可能会丢失数据。最好的解决方案之一是@N.B所说的(这个问题的第一条评论):"
添加第四列。保存3列组合的哈希值。使列唯一。"