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;
相关文章
|
机器学习/深度学习 SQL 关系型数据库
【MySQL进阶之路丨第十一篇】一文带你精通MySQL NULL值处理、正则表达式
【MySQL进阶之路丨第十一篇】一文带你精通MySQL NULL值处理、正则表达式
208 0
|
SQL 关系型数据库 MySQL
总结 vue3 的一些知识点:MySQL NULL 值处理
总结 vue3 的一些知识点:MySQL NULL 值处理
|
SQL 关系型数据库 MySQL
MySQL NULL 值处理
MySQL NULL 值处理
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之从MySQL同步数据到Doris时,历史数据时间字段显示为null,而增量数据部分的时间类型字段正常显示的原因是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
SQL 关系型数据库 MySQL
python在mysql中插入或者更新null空值
这段代码是Python操作MySQL数据库的示例。它执行SQL查询从表`a_kuakao_school`中选取`id`,`university_id`和`grade`,当`university_id`大于0时按升序排列。然后遍历结果,根据`row[4]`的值决定`grade`是否为`NULL`。若不为空,`grade`被格式化为字符串;否则,设为`NULL`。接着构造UPDATE语句更新`university`表中对应`id`的`grade`值,并提交事务。重要的是,字符串`NULL`不应加引号,否则更新会失败。
338 2
|
SQL 关系型数据库 MySQL
在 MySQL 中使用 IS NULL
【8月更文挑战第12天】
967 0
在 MySQL 中使用 IS NULL
|
SQL 关系型数据库 MySQL
mysql不等于<>取特定值反向条件的时候字段有null值或空值读取不到数据
对于数据库开发的专业人士来说,理解NULL的特性并知道如何正确地在查询中处理它们是非常重要的。以上所介绍的技巧和实例可以帮助你更精准地执行数据库查询,并确保数据的完整性和准确性。在编写代码和设计数据库结构时,牢记这些细节将有助于你避免许多常见的错误,提高数据库应用的质量与性能。
470 0
|
SQL 存储 索引
MySQL设计规约问题之为什么应该把字段定义为NOT NULL并且提供默认值
MySQL设计规约问题之为什么应该把字段定义为NOT NULL并且提供默认值
|
SQL 关系型数据库 MySQL
MySQL外键约束行为解析:CASCADE, NO ACTION, RESTRICT, SET NULL
MySQL外键约束行为解析:CASCADE, NO ACTION, RESTRICT, SET NULL
1935 0
|
存储 关系型数据库 MySQL
如何修改MySQL列允许Null?
如何修改MySQL列允许Null?
423 1
如何修改MySQL列允许Null?

推荐镜像

更多