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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 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;
相关文章
|
小程序 JavaScript API
微信小程序获取手机号流程以及用到的API
微信小程序获取手机号流程以及用到的API
728 0
|
JSON JavaScript 前端开发
CocosCreator3.8研究笔记(四)CocosCreator 脚本说明及使用(上)
CocosCreator3.8研究笔记(四)CocosCreator 脚本说明及使用(上)
1215 0
CocosCreator3.8研究笔记(四)CocosCreator 脚本说明及使用(上)
|
弹性计算 负载均衡 小程序
阿里云免费服务器申请攻略(入口及限制条件)
阿里云免费服务器申请攻略(入口及限制条件)阿里云服务器免费试用申请链接入口free.aliyun.com 阿里云个人用户和企业用户均可申请免费试用,最高可以免费使用3个月
2014 0
|
存储 弹性计算 监控
ECS 7 天实践训练营 - day06 - 案例分享钉钉
尽管一直在使用钉钉,但未曾想到钉钉成功的背后与“云”的发展有着千丝万缕的关系。
1037 0
|
Java Maven Perl
IDEA快捷键拆解系列(十八):Live Templates篇
  这是IDEA快捷键拆解系列的第十八篇。   本文将介绍一下IDEA强大的Live Template功能。   首先,我们要知道Live Template是在哪里定义的,先按Ctrl + Shift + S进入设置,接着在输入框输入“Live Template”就可以定位到了,如下图所示。
1797 0
|
Ubuntu Linux Shell
Linux问题情报分享(3):CentOS 7上最新kernel-debuginfo包与当前内核版本不匹配
升级了下系统,而后运行SystemTap脚本失败。原因竟然是升级了kernel-debuginfo包所致。
7136 0
|
算法 前端开发 C++
每周一算法之六——KMP字符串匹配算法
KMP是一种著名的字符串模式匹配算法,它的名称来自三个发明人的名字。这个算法的一个特点就是,在匹配时,主串的指针不用回溯,整个匹配过程中,只需要对主串扫描一遍就可以了。因此适合对大字符串进行匹配。 搜了网上很多KMP的代码下来调试,发现不是下标越界,就是死循环的,相当诡异...最后重新拿起严老师那本《数据结构》来翻,各种费解,有个地方用下标值和字符串下标0的元素做判断,更是诡异了... 过了一天,忽然觉悟了。
1109 0