这句话有什么问题?

时间:2010-01-26 13:35:49

标签: mysql mysql-error-1071

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>

我将300更改为250,这没关系。但我真的不明白。

4 个答案:

答案 0 :(得分:6)

您的数据库编码设置为UTF8

UTF8个字符3个字符可能最多MySQL个,因此767字节为255个字符。

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

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

CREATE INDEX ix_newsgroup_name ON newsgroup (name (30))

,足以进行前缀搜索,并添加另一列来存储MD5哈希,以确保唯一性。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

从varchar中删除UNIQUE。