25

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

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MjM5NzAzMTY4NQ%3D%3D&%3Bmid=2653933061&%3Bidx=1&%3Bsn=2c5da332eb34924b928c8a3aa9420943
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

导读

作者:高鹏(网名八怪),《深入理解MySQL主从原理32讲》系列文的作者。

想阅读八怪源码文章欢迎订阅

j2IVBjr.jpg!web

本文建议横屏观看,效果更佳

一、测试环境

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

二、解析

原始存储如下:

  • 07:第2个字段可变长度7

  • 00 第1个字段可变长度0

  • 00 NULL位图 没有NULL字段

  • 0000100022: 5字节固定

  • 00000014061c ROWID

  • 000000002fe5 TRX ID

  • bb0000016e0110 ROLL PTR

  • 第一个字段没有存储 字符''

  • 67616f70656e67 第二个字段 'gaopeng'

原始存储如下:

  • 07 第2个字段可变长度7

  • 01 第1个字段可变长度1

  • 00 NULL位图 没有NULL字段

  • 0000180022 5字节固定

  • 00000014061d ROWID

  • 000000002fe6 TRX ID

  • bc000001790110 ROLL PTR

  • 20 空字符' '

  • 67616f70656e67 第二个字段 'gaopeng'

原始存储如下:

  • 07:第2个字段可变长度7

  • 01: NULL位图为为00000001 表示第一个字段为NULL

  • 000020ffac 5字节固定

  • 00000014061e ROWID

  • 000000002feb TRX ID

  • bf0000017c0110 ROLL PTR

  • 第一个字段NULL

  • 67616f70656e67 第二个字段 'gaopeng'

三、总结

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

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

  • ' ' 做存储为0X20,记录可变长度为01,NULL位图本位为0。

如何方便的查看数据文件参考文章: MySQL:如何快速的查看Innodb数据文件

END

识别下方二维码添加作者为好友

JV3QFzF.jpg!web

JnMRZzF.gif

JnMRZzF.gif

扫码加入MySQL技术Q群

(群号: 650149401)

ba2EF3u.jpg!web

点“在看”给我一朵小黄花

r2yqyiV.png!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK