VARCHAR 最多存多少个字符?|mysql系列(3)

VARCHAR 最多存多少个字符?|mysql系列(3),第1张

前言

上篇《VARCHAR(M) 到底占用多少个字节?|mysql系列(2)》分享了VARCHAR(M) 占用多少个字节,那VARCHAR 最大能存多少个字符呢?以及了解这些对我们平时的开发工作中有什么帮助呢?那我们就要了解下存储引擎中是怎么来处理数据的。这里我们还是以InnoDB 为例。

InnoDB数据记录的结构

在《执行sql 语句时发生了什么?|mysql 系列(1)》一文中讲到,MySQL服务器上负责对表中数据的读取和落盘(即写入磁盘)工作是由存储引擎 完成的。InnoDB是一个将表中的数据存储到磁盘上的存储引擎 。这也是mysql 持久化的保证。插入的数据记录在磁盘上的存放方式被称为行格式或者记录格式。Mysql 目前有4种行格式:Redundant、Compact、Dynamic、Compressed.

其中:

Redundant 目前貌似很少使用了。

可以用下面的语句来查看行格式。

我们以常用的Compact、Dynamic、Compressed 行格式为例。一条完整的记录其实可以被分为 记录的额外信息 和记录的真实数据两大部分 。Compact、Dynamic、Compressed行格式不同的地方在记录的真实数据部分。我们寻求答案的地方在记录的额外信息里面。

记录的额外信息

记录的额外信息包括:变长字段长度列表、NULL值列表和记录头信息。

变长字段长度列表: 比如VARCHAR(M)、VARBINARY(M)、各种TEXT类型,各种BLOB类型,把拥有这些数据类型的列称为变长字段

变长字段占用的存储空间分为两部分:

真实数据内容是就是存的具体的值。那么对于占用的字节数该怎么表示呢?

如果列中的字符串都比较短,也就是说内容占用的字节数比较小,用1个字节就可以表示,但是如果变长列的内容占用的字节数比较多,可能就需要用2个字节来表示。具体用1个还是2个字节来表示真实数据占用的字节数。

对于VARCHAR(M)来说:

如果M×L <= 255,那么使用1个字节来表示真正字符串占用的字节数。

如果M×L >255,则分为两种情况:

所以,如果最多有2个字节来表示真正字符串占用的字节数的话。2个字节能表示最大的数为: 16个2进制位 也就是2的16次方= 65535 。如果VARCHAR(M)类型的列使用的不是ascii字符集,那M的最大取值取决于该字符集表示一个字符最多需要的字节数。

举个例子:

以上就是今天的分享,欢迎拍砖!

mysql基础知识系列,阅读人数出乎我的意料之外,看来大家对mysql还是比较感兴趣,同时也有一些小伙伴有些疑惑,在这里一一解答下。

1、该系列的阅读对象是谁?

诚然,MySQL和SQL Server数据库的语法大部分都是遵循SQL的标准的,但是在使用过程中还是有些差别,特别是有些小白同学感觉这就是两个数据库,两种语法。

所以该系列的读者对象主要是小白同学或对MySQL和SQL Server之间的区别不太了解的初学者准备的。如果你对两个数据库的SQL语法烂熟于心,可以忽略,当然也欢迎大家进行勘误(上次就写错了一个语法)。

2、该系列与《SQL基础知识》有什么明显的不同?

《SQL基础知识》经过两个版本的迭代,把SQL Server的一些基础语法基本全部囊括进去了,而MySQL基础知识系列在沿用《SQL基础知识》系列的基础上,会对一些使用过程中容易出错的地方进行较长篇幅的讲解或注释,内容上会更加详细。

此外还会把MySQL独有或者与其他数据库不同的的一些语法进行强调。

3、该系列什么时候能出完?

进度需要根据现实情况而定,由于我本身也是一名数据库开发工程师,和大多数程序员类似,也会经常加班,只有下班才有时间写作。

虽然很多知识点都比较类似,但是还是会对每一段代码进行测试和截图,所以还是会需要一定的时间,有时候下班太晚,你们第二天可能就看不到了,但是可以保证在三个月内出完。

到时候还是会以汇总链接+PDF的形式进行汇总整理,方便大家阅读和学习。

4、会像《SQL基础知识》系列,出高级知识吗?

会的,其实MySQL与SQL Server最大的不同就在于高级知识部分,包括一些系统函数,存储过程,变量,临时表,触发器等等的使用都是不大一样的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7644591.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-08
下一篇 2023-04-08

发表评论

登录后才能评论

评论列表(0条)

保存