1) 索引字段的附加信息,可以分为变长和定长数据类型讨论,当索引字段为定长数据类型,比如说char int datetime,需要有是否为空的标记,这个标记需要占用1个字节对于变长数据类型,比如说:varchar,除了是否为空的标记外,还需要有长度的信息需要占用两个字节(备注:当字段类型定义为非空的时候,是否为空的标记将不占用字节)
2) 同时还需要考虑表所使用的字符集,不同的字符集,gbk编码的为一个字符2个字节,utf3个字节
总结key_len的长度计算公式
varchar(10)变长且允许null:10*(character set:utf8=3,gbk=2,latin1=1)+1(null)+2(变长字段)
varchar(10)变长字段且不允许null:10*(character set:utf8=3,gbk=2,latin1=1)+2(变长字段)
char(10)固定字段且允许null:10*(character set:utf8=3,gbk=2,latin1=1 )+1(null)
char(10)固定长度且不允许为null:10*(character set:utf8=3,gbk=2,latin1=1 )
注:order所使用的索引长度不包含在内