【发布时间】:2014-02-25 09:15:46
【问题描述】:
我有一个字段(链接),它是 varchar (1500),我想使其独一无二。我将更改应用到 mysql 配置并将长度增加到 3072 字节
ROW_FORMAT=DYNAMIC, innodb_file_format = Barracuda, innodb_large_prefix = true
但是当我对我的领域应用 unique 时,我得到了下一个错误:
"#1071 - Specified key was too long; max key length is 3072 bytes"
我的字段是 varchar(1500),即 3000 字节。
怎么了?
更新 (1) 表格数据:
CREATE TABLE IF NOT EXISTS `pages` (
`link` varchar(1500) NOT NULL,
`domain` varchar(255) NOT NULL,
`lastvisited` datetime DEFAULT NULL,
`id` bigint(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
KEY `link` (`link`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ROW_FORMAT=DYNAMIC;
更新 (2) 更改命令(通过 PHPMYADMIN 完成)
ALTER TABLE `pages` ADD UNIQUE (
`link`
)
【问题讨论】:
-
character set of table and column是什么? -
utf8.我更新了问题。
-
如果您使用 UTF-8,每个字符可以是 3 个字节 - 即 4500 个字节,超过了最大密钥长度。我建议无论如何,这么长的钥匙充其量是笨拙的。
-
如果您想在其中插入一个长字符串,您可以将您的列
link设为TEXT。 -
@Tigran:您的
CREATE语句没有显示您在问题中谈到的UNIQUE约束,只是一个非唯一的KEY
标签: mysql