MySQL数据类型存储空间占用字符串

先上一张官方文档的截图

看起来很复杂,实际还是较简单的
用W来表示1个字符在字符集下的最大占用
比如:utf8为3,utf8mb4就为4

char(M) 所占的空间就是 M*W 字节
varchar(M) 占用空间为两种
1、如果M*W255 最大占用空间即为 2 + M*W

看到这个文档时。我以为key_len也是按此规则来计算的,实际不是。来看一个实例

drop table stt; create table stt ( id int not null, str1 char(10) not null, str2 varchar(60) not null, str3 varchar(70) not null, primary key(id) ) engine = InnoDB default charset = utf8mb4 ROW_FORMAT=COMPACT ; insert into stt values(1,'abcd','abcd','abcd'); alter table stt add index idx1(str1),add index idx2(str2),add index idx3(str3); explain select 1 from stt where str1 = 'abcd'; explain select 1 from stt where str2 = 'abcd'; explain select 1 from stt where str3 = 'abcd';