Mysql 什么';这句话怎么了?
我将Mysql 什么';这句话怎么了?,mysql,mysql-error-1071,Mysql,Mysql Error 1071,我将300更改为250,这没问题。但我不太明白。您的数据库编码设置为UTF8 UTF8字符在MySQL中最多可以占用3字节,因此767字节是255字符 不建议在这样长的文本字段上创建唯一的索引 相反,创建一个带前缀的普通索引 mysql> create table newsgroup( -> id integer unsigned NOT NULL AUTO_INCREMENT, -> creater integer unsigned NOT NULL,
300
更改为250
,这没问题。但我不太明白。您的数据库编码设置为UTF8
UTF8
字符在MySQL
中最多可以占用3
字节,因此767
字节是255
字符
不建议在这样长的文本字段上创建唯一的
索引
相反,创建一个带前缀的普通索引
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>
,这对于前缀搜索就足够了,并添加另一列来存储
MD5
散列,以确保唯一性。您使用的是utf-8或更重的字符集,因此每个符号都由一个、两个、三个或四个字节表示。在MySQL中,utf8表示最大3字节序列,最大4字节序列。767字节是InnoDB表的前缀限制。:)
请参见此处:从varchar中删除UNIQUE。什么是MySQL服务器版本?相关答案为和。
CREATE INDEX ix_newsgroup_name ON newsgroup (name (30))