mysql - 如何添加约束唯一包含比默认字符更多的两列

标签 mysql constraints alter

我想添加唯一的列,即标题、语言和下载(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/

相关文章:

python - 如何将大表(超过 1 亿行)导出到文本文件?

php - mysql_fetch_array($result) 会获取什么样的数组?

PHP + MySQL + 工具提示

Android,处理 SQLiteConstraintException

Mysql 修改表日期不为空

mysql - innodb_online_alter_log_max_size 是否从内存或硬盘中获取内存

sql - 选择最近 7 天的行的最佳方式是什么?

sql - 结合 UNIQUE 和 CHECK 约束

ios - 让 WKWebView 覆盖整个屏幕

mysql - 如何从我的 MySQL 表中删除约束?