暂无图片
请问各位大佬,mysql数据库key length计算问题:不存在not null约束为什么要加1?
我来答
分享
小北
2024-02-15
请问各位大佬,mysql数据库key length计算问题:不存在not null约束为什么要加1?

请问各位大佬,mysql数据库key length计算问题:不存在not null约束为什么要加1?

如果索引列可以为空,则在索引列数据类型本身占用空间基础上加1。比如索引(`id`,`num_1`) id 列占用4个字节,num_1列占用4个字节,且两列都可以为空,所以key_len=4+4+2=10。

请问这个加1是为什么呢?


我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新

MySQL中key_len计算规则如下:

  1. 如果列可以为空,则在数据类型占用字节的基础上加1,如int型,不能为空key_len为4,可以为空key_len为5
  2. 如果列是变长的,则在数据列所占字节的基数上再加2,如varbinary(10),不能为空,则key_len为10  + 2 ,可以为空则key_len为10+2+1
  3. 如果是字符型,则还需要考虑字符集,如某列的定义是varchar(10),且是utf8,不能为空,则key_len为10 * 3 + 2,可以为空则key_len为10*3+2+1
暂无图片 评论
暂无图片 有用 2
lu9up的数据库笔记

InnoDB需要为这个列的值保留一个字节来标记它是否为NULL,在计算索引长度时,没有NOT NULL约束,需要为这个可能的NULL标记预留一个字节。

举个栗子,假设我们有一个VARCHAR(255)的列,使用utf8mb4字符集(每个字符最多需要4个字节)。在不考虑其他因素的情况下,这个列的索引长度应该是255 * 4 = 1020字节。但是,因为我们没有设置NOT NULL约束,所以还需要加上1个字节来标记NULL值,所以实际的索引长度是1021字节。

暂无图片 评论
暂无图片 有用 2
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏