我想添加唯一的列,即标题、语言和下载(3 列)。因为我没有其他选项来删除重复的条目。这是代码:
ALTER TABLE datapdf ADD CONSTRAINT tb_uq UNIQUE (title, language, download);
但我收到此错误:
1071 - 指定的键太长;最大 key 长度为 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);
这是操作
。
ALTER TABLE datapdf ADD CONSTRAINT tb_uq UNIQUE (title, language, download)
所以我认为你可以更改表的结构(如果可能)来解决这个问题。但是,这不是一个好的解决方案,因为你可能会丢失数据。最好的解决方案之一是@N.B 说(这个问题的第一条评论):“
添加第四列。保存 3 列组合的哈希值。使该列独一无二。”
关于mysql - 如何添加约束唯一包含比默认字符更多的两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38682099/