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))