MySQL innodb的组合索引各个列中的长度不能超过7

Specified key was too long max key length is 1000 bytes,specifiedlength

Mysql建立索引时遇到一个问题就是索引字段长度太长,解决办法:

1.修改字段长度 ;

2.修改mysql默认的存储引擎 ,修改为INNODB;

key was too long max key length is 1000 bytes,specifiedlength Mysql建立索引时遇到一个问题就是索引字段长度太长,解决办法: 1.修改字段长度...

MySQL索引的索引长度问题

 

  MySQL的每个单表中所创建的索引长度是有限制的,且对不同存储引擎下的表有不同的限制。
  在MyISAM表中,创建组合索引时,创建的索引长度不能超过1000,注意这里索引的长度的计算是根据表字段设定的长度来标量的,例如:
create table test(id int,name1 varchar(300),name2 varchar(300),name3 varchar(500))charset=latin1 engine=myisam;
create index test_name on test(name1,name2,name3);
  此时报错:Specified key was too long;max key length is 1000 bytes.

  修改表结构:alter table test convert to charset utf8;
  create index test_name3 on test(name3).
  此时warning:Specified key was too long;max key length is 1000 bytes.但是索引创建成功,查看表结构可以看到创建的索引是一个前缀索引:‘key test_name3(name3(333))’

太阳集团所有网址16877,  得出的结论是:对于myisam表,如果创建组合索引,所创建的索引长度和不能超过1000 bytes,否则会报错,创建失败;对于myisam的单列索引,最大长度也不能超过1000,否则会报警,但是创建成功,最终创建的是前缀索引(取前333个字节)。

  在Innodb表中,创建组合索引:
  create table test1(id int,name1 varchar(300),name2 varchar(300),name3 varchar(500))charset=latin1 engine=innodb;
  create index test1_name on test(name1,name2,name3);
  此时给出warning:Specified key was too long;max key length is 767 bytes.

  修改表结构:alter table test1 convert to charset utf8;
  create index test1_name3 on test(name3).
  此时给出warning:Specified key was too long;max key length is 767 bytes.

本文由太阳集团所有网址16877发布于太阳集团城网址送彩金,转载请注明出处:MySQL innodb的组合索引各个列中的长度不能超过7

您可能还会对下面的文章感兴趣: