4
mysql> create table newsgroup(
    ->  id integer unsigned NOT NULL AUTO_INCREMENT,
    ->  creater integer unsigned NOT NULL,
    ->  coremember integer unsigned DEFAULT NULL,
    ->  name varchar(300) not null unique,
    ->  description text,
    ->  created datetime not null,
    ->  PRIMARY KEY (id)
    -> );
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
mysql>

我改成300250没关系。但我不太明白。

4

4 回答 4

6

您的数据库编码设置为UTF8

一个UTF8字符最多可以占用 中的3字节MySQL,因此767字节就是255字符。

UNIQUE不建议在如此长的文本字段上创建索引。

相反,创建一个普通的前缀索引

CREATE INDEX ix_newsgroup_name ON newsgroup (name (30))

,这对于前缀搜索就足够了,并添加另一列来存储MD5哈希以确保唯一性。

于 2010-01-26T13:38:09.373 回答
1

767 字节是 InnoDB 表的规定前缀限制。:)

见这里:http ://dev.mysql.com/doc/refman/5.1/en/create-index.html

于 2010-01-26T13:39:52.983 回答
0

您使用的是 utf-8 甚至更重的字符集,因此每个符号都由一个、两个、三个或四个字节表示。在 MySQLutf8中代表最大 3 字节序列,utf8mb4最大 4 字节序列。

于 2010-01-26T13:38:27.813 回答
-1

从 varchar 中删除 UNIQUE。

于 2010-01-26T13:40:08.153 回答