MYSQL原理学习篇简记(三)

👏作者简介:大家好,我是小周同志,25届双非校招生Java选手,很高兴认识大家

📕学习出处:本文是学自小林coding (xiaolincoding.com) 网站的MYSQL图解篇

🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦

varchar(n) 中 n 最大取值为多少?

单字段的情况

一行数据的最大字节数是 65535(不包含 TEXT、BLOBs 这种大对象类型),其中包含了 storage overhead

storage overhead 是什么?其实就是**「变长字段长度列表」** 和 「NULL 值列表」 ,也就是说一行数据的最大字节数 65535,其实是包含「变长字段长度列表」和 「NULL 值列表」所占用的字节数的。所以, 我们在算 varchar(n) 中 n 最大值时,需要减去 storage overhead 占用的字节数。

因为我们存储字段类型为 varchar(n) 的数据时,其实分成了三个部分来存储:

  • 真实数据

  • 真实数据占用的字节数

  • NULL 标识,如果不允许为NULL,这部分不需要

NULL 值列表 所占用的字节数是多少?

  • 前面我创建表的时候,字段是允许为 NULL 的,所以会用 1 字节来表示「NULL 值列表」

变长字段长度列表 所占用的字节数是多少?

「变长字段长度列表」所占用的字节数 = 所有「变长字段长度」占用的字节数之和。

所以,我们要先知道每个变长字段的「变长字段长度」需要用多少字节表示?具体情况分为:

  • 条件一:如果变长字段允许存储的最大字节数小于等于 255 字节,就会用 1 字节表示「变长字段长度」;
  • 条件二:如果变长字段允许存储的最大字节数大于 255 字节,就会用 2 字节表示「变长字段长度」

  • 在 UTF-8 字符集下,一个字符最多需要三个字节,varchar(n) 的 n 最大取值就是 65532/3 = 21844。

多字段的情况

如果有多个字段的话,要保证所有字段的长度 + 变长字段字节数列表所占用的字节数 + NULL值列表所占用的字节数 <= 65535

行溢出后,MySQL 是怎么处理的?

MySQL 中磁盘和内存交互的基本单位是页,一个页的大小一般是 16KB,也就是 16384字节,而一个 varchar(n) 类型的列最多可以存储 65532字节,一些大对象如 TEXT、BLOB 可能存储更多的数据,这时一个页可能就存不了一条记录。这个时候就会发生行溢出,多的数据就会存到另外的「溢出页」中

相关推荐
行云流水剑1 小时前
【学习记录】使用 Kali Linux 与 Hashcat 进行 WiFi 安全分析:合法的安全测试指南
linux·学习·安全
门前云梦4 小时前
《C语言·源初法典》---C语言基础(上)
c语言·开发语言·学习
0x7CF4 小时前
QT3D学习笔记——圆台、圆锥
qt·学习·3d
qq_386322695 小时前
华为网路设备学习-24(路由器OSPF - 特性专题)
学习·华为·智能路由器
viperrrrrrrrrr75 小时前
大数据学习(132)-HIve数据分析
大数据·hive·学习
2401_878454536 小时前
node.js的初步学习
学习·node.js
Clair-Sean7 小时前
【JavaSE】多线程基础学习笔记
笔记·python·学习
moxiaoran57537 小时前
uni-app学习笔记三十四--刷新和回到顶部的实现
笔记·学习·uni-app
不做无法实现的梦~8 小时前
rm视觉学习1-自瞄部分
学习
꧁坚持很酷꧂8 小时前
FreeRTOS学习02_任务管理
stm32·学习