我有一个varchar(1500)的字段(链接),我想要使其唯一。我将更改应用于mysql配置并将长度增加到3072字节
ROW_FORMAT=DYNAMIC, innodb_file_format = Barracuda, innodb_large_prefix = true
但是当我对我的领域应用独特时,我得到了下一个错误:
"#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`
)
答案 0 :(得分:3)
由于您将在link
列中存储URL,因此您实际上不需要使用UTF8,因为URL只能包含ASCII字符。为link
列指定纯ASCII字符编码甚至可以将其最大长度提高到3072个字符。
CREATE TABLE IF NOT EXISTS `pages` (
`link` varchar(1500) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
`domain` varchar(255) NOT NULL,
`lastvisited` datetime DEFAULT NULL,
`id` bigint(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
UNIQUE KEY `link` (`link`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ROW_FORMAT=DYNAMIC;
(根据@ eggyal关于ascii_bin
整理的建议更新)