MySQL中'' ' ' NULL在Innodb存储的区别

简介: MySQL中'' ' ' NULL在Innodb存储的区别

一、测试环境

  1. mysql> create table testn(a varchar(20),b varchar(20));
  2. Query OK, 0 rows affected (0.43 sec)

  3. mysql> insert into testn values('','gaopeng');
  4. Query OK, 1 row affected (0.08 sec)

  5. mysql> insert into testn values(' ','gaopeng');
  6. Query OK, 1 row affected (0.12 sec)

  7. mysql> insert into testn values(NULL,'gaopeng');
  8. Query OK, 1 row affected (0.08 sec)

  9. mysql> commit;
  10. Query OK, 0 rows affected (0.00 sec)

我们看到包含了3行,包含了3种情况,下面我们分别分析。


二、解析

  1. 第一行 insert into testn values('','gaopeng');

原始存储如下:

  1. 070000000010002200000014061c000000002fe5bb0000016e011067616f70656e67
  • 07:第2个字段可变长度7
  • 00第1个字段可变长度0
  • 00NULL位图 没有NULL字段
  • 0000100022:5字节固定
  • 00000014061cROWID
  • 000000002fe5TRX ID
  • bb0000016e0110ROLL PTR
  • 第一个字段没有存储 字符''
  • 67616f70656e67 第二个字段 'gaopeng'
  1. 第二行:insert into testn values(' ','gaopeng');

原始存储如下:

  1. 070100000018002200000014061d000000002fe6bc0000017901102067616f70656e67
  • 07第2个字段可变长度7
  • 01第1个字段可变长度1
  • 00NULL位图 没有NULL字段
  • 00001800225字节固定
  • 00000014061dROWID
  • 000000002fe6TRX ID
  • bc000001790110ROLL PTR
  • 20空字符' '
  • 67616f70656e67第二个字段 'gaopeng'

原始存储如下:


  • 07:第2个字段可变长度7
  • 01:NULL位图为为00000001 表示第一个字段为NULL
  • 000020ffac5字节固定
  • 00000014061eROWID
  • 000000002febTRX ID
  • bf0000017c0110ROLL PTR
  • 第一个字段NULL
  • 67616f70656e67第二个字段 'gaopeng'

三、总结

  • ''不做存储,但是会记录可变长度的长度为0,NULL位图本位为0。
  • NULL不做实际存储,也不会记录可变长度,但是NULL位图本位为1。
  • ' ' 做存储为0X20,记录可变长度为01,NULL位图本位为0。



            </div>
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
10、pip换源加速下载的方式
10、pip换源加速下载的方式
10、pip换源加速下载的方式
|
安全 小程序 物联网
WLAN基础 无线局域网配置方法 旁挂三层组网隧道转发方式配置
WLAN基础 无线局域网配置方法 旁挂三层组网隧道转发方式配置
1877 0
WLAN基础 无线局域网配置方法 旁挂三层组网隧道转发方式配置
|
SQL Oracle 关系型数据库
能与PowerDesigner媲美的数据库建模工具PDMan
在设计数据库时,对现实世界进行分析、抽象、并从中找出内在联系,进而确定数据库的结构,这一过程就称为数据库建模。
595 0
能与PowerDesigner媲美的数据库建模工具PDMan
|
程序员 API Android开发
iOS开发:简单的Toast提示框实现
博主是以iOS开发出身,那就最后一篇博文就分享一下关于iOS的内容吧。iOS开发过程中,有些时候操作App的时候,需要给用户对应的响应提示操作,使用系统自带的提示框不是每种情况都适用的。
1015 0
iOS开发:简单的Toast提示框实现
|
NoSQL 关系型数据库 MySQL
使用redis( RedisTemplate )中的BitMap 记录用户签到情况
使用redis( RedisTemplate )中的BitMap 记录用户签到情况
807 0
|
存储 算法 NoSQL
浅谈软件编程中的8大数据结构
浅谈软件编程中的8大数据结构
448 0
浅谈软件编程中的8大数据结构
如何解决MyBatisPlus插入时生成的id为很大的数
如何解决MyBatisPlus插入时生成的id为很大的数
509 0
如何解决MyBatisPlus插入时生成的id为很大的数
|
消息中间件 存储 SQL
分布式事务理论详解
分布式事务理论详解
389 0
分布式事务理论详解
|
算法 IDE 大数据
二分法,不止是算法 - 你可能不知道的二分法应用
二分法大家都知道,记得应该是从初中学数学就学过,而在编程中也经常使用二分法来进行有序数列的查找。然而二分法并不紧紧局限于算法中的使用,他还被广泛使用于我们的工具中、数学中甚至生活中。
|
JSON JavaScript 前端开发
Python常用配置文件ini、json、yaml读写总结
Python常用配置文件ini、json、yaml读写总结
676 0