database mysql中索引的索引长度问题

参考:
http://lsting.iteye.com/blog/707749
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.

我们这个测试,
drop table if exists test;
create table test(test varchar(767) primary key)charset=latin5;
— 成功

drop table if exists test;
create table test(test varchar(768) primary key)charset=latin5;
— 错误
— ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

drop table if exists test;
create table test(test varchar(383) primary key)charset=GBK;
— 成功

drop table if exists test;
create table test(test varchar(384) primary key)charset=GBK;
— 错误
— ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

drop table if exists test;
create table test(test varchar(255) primary key)charset=UTF8;
— 成功

drop table if exists test;
create table test(test varchar(256) primary key)charset=UTF8;
— 错误
— ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

如果你还看不错区别,那我只要明说了。
MySQL的varchar主键只支持不超过768个字节 或者 768/2=384个双字节 或者 768/3=256个三字节的字段
而 GBK是双字节的,UTF-8是三字节的。 MySQL ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes 的原因分析

Tagged: ,

Comments are closed.