MySQL唯一1500 varchar字段错误(#1071 - 指定密钥太长)

时间:2014-02-25 09:15:47

标签: mysql

我有一个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`
)

1 个答案:

答案 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整理的建议更新)