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
,这没关系。但我真的不明白。
答案 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。