mysql varchar innodb页面大小限制8100字节

mysql varchar innodb页面大小限制8100字节,mysql,Mysql,关于innodb,最近有人告诉我: “varchar内容超过768字节 存储在补充的16K页中” 这很有趣。如果每个varchar都是拉丁文1,我相信每个字母存储1字节,那么单个varchar(500)(768字节)会吗?? (这个问题是为了找出是否所有的varchar或只是大varchar都被拆分成一个单独的页面) 是每个varchar的768限制,还是将行中所有varchar的768限制相加?(例如,是否对此进行了优化-varchar(300)、varchar(300)、varchar(30

关于innodb,最近有人告诉我:

“varchar内容超过768字节 存储在补充的16K页中”

这很有趣。如果每个varchar都是拉丁文1,我相信每个字母存储1字节,那么单个varchar(500)(768字节)会吗?? (这个问题是为了找出是否所有的varchar或只是大varchar都被拆分成一个单独的页面)

是每个varchar的768限制,还是将行中所有varchar的768限制相加?(例如,是否对此进行了优化-varchar(300)、varchar(300)、varchar(300):[其中每个单独的varchar列小于768个字符,但它们加在一起大于768个字符]

我对768限制是否与每一个单独的varchar或行中的所有varchar(如问题中所述)相关感到困惑。是否有任何澄清

编辑:删除了关于字符的部分,因为发现了字符的最大限制为255个。

当前MySQL的没有提到这个限制。它实际上给人的印象是VARCHAR存储在行本身中,因为一行中所有VARCHAR的长度之和不能超过65k字节

它还提到存储是长度+数据,这与您描述的不同

我确实在以下内容中发现了拆分存储:

在以前版本的中创建的表 InnoDB使用“羚羊”文件格式, 只支持 行\格式=冗余和 行格式=压缩。在这些格式中, InnoDB存储数据的前768字节 中的BLOB、VARCHAR和TEXT列 聚集索引记录以及 主键。768字节前缀为 后跟一个20字节的指针,指向 包含其余内容的溢出页 列的值

对我来说,这意味着在确定该列是否需要溢出时,每个列都要单独考虑

这似乎与MySQL的较新版本形成了对比,后者存储VARCHAR的方式似乎完全不同。较新版本中的VARCHAR最大长度为65k字节,似乎存储在记录iself中(无溢出),这导致所有列的长度总和不得超过65k字节

字符是非常不同的。它的最大长度是255,并且存储在行本身中。因此没有字符(500):)

CHAR列的长度是固定的 到您声明的时间长度 您可以创建表。长度可以 可以是0到255之间的任意值。当字符 值是存储的,它们是 在右侧填充空格,以便 指定长度。当字符值为 已检索,将删除尾随空格 除非PAD\u CHAR\u到\u全长SQL 模式已启用


我不知道chars有上限!谢谢瓦查尔斯,是的,这是我找到的引语之一。基本上,我不知道它是与每一个单独的varchar相关,还是与总计行中的所有varchar相关(如问题中所述)。这种混淆是由于它们在列中使用复数。有什么澄清吗?@David19801我也不知道。如果您使用这样一个较旧版本的MySQL,那么我认为它将是每个字段。对于较新版本,VARCHAR的唯一限制是所有列的长度不能超过65k。