mysql - 为什么MySQL不建议使用NULL作为列默认值?

为什么MySQL不建议使用NULL作为列默认值?

InnoDB有4中行格式:

  • Redundant : 非紧凑格式,5.0 版本之前用的行格式,目前很少使用,
  • Compact : 紧凑格式,5.1 版本之后默认行格式,可以存储更多的数据
  • Dynamic , Compressed : 和Compact类似,5.7 版本之后默认使用 Dynamic 行格式,在Compact基础上做了改进,基础设计原理没变

由于Redundant较少使用, 且Dynamic和Compressed是基于Compact的, 故这里以Compact为例。

Compact行格式如下:

存储的额外数据 存储的真实数据
变长数据列的长度 NULL值的列表 记录头信息 row_id (隐藏字段) trx_id (隐藏字段) roll_ptr (隐藏字段) 列1 列2 ... 列n

由于:

  1. NULL值列表的数量, 与允许为null的字段数量一致 如, 有7个字段允许为null, 则有7个NULL值列表
  2. NULL值列表至少占用1字节空间, 故当数据量越大或null列越多时, 占用的存储空间越多

综上所述, 不建议允许列为null, 可使用其他默认值(如空字符串, 0等)

相关推荐
️学习的小王1 小时前
MySQL常用函数知识点总结
数据库·mysql·oracle
万亿少女的梦1681 小时前
基于Spring Boot、Java与MySQL的同城宠物服务系统设计与实现
java·spring boot·mysql·系统设计·协同过滤
万亿少女的梦1682 小时前
基于Spring Boot、Vue与MySQL的私人健身教练预约管理系统设计
java·spring boot·mysql·vue·预约管理
灯澜忆梦12 小时前
【MySQL12】进阶篇 | SQL优化
数据库·sql·mysql·性能优化
东方护航数据恢复(深圳)19 小时前
MySQL_Oracle数据库崩溃修复全攻略_东方护航数据恢复深圳店
数据库·mysql·oracle
ruleslol21 小时前
index merge避免回表
mysql
码农颜1 天前
5.5.2 MVCC 多版本实现
java·数据库·mysql
北风toto1 天前
MySQL 批量随机化主键 ID,如何同步更新关联子表?
数据库·mysql
2501_937860941 天前
MySQL CRUD 增删改查
数据库·mysql
竹枝溪1 天前
MySQL数据库零基础入门
数据库·sql·mysql·navicat·ddl·dml·dql