我想为标题,语言和下载(3列)的列添加唯一。因为我没有其他选项来摆脱重复的条目。这是代码:
ALTER TABLE datapdf ADD CONSTRAINT tb_uq UNIQUE (title, language, download);
但是我收到了这个错误:
这有什么解决方案吗?但请记住,它应该与这三列匹配。
答案 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列的哈希值。使列唯一。"