书中第五章:从一条记录说起—— InnoDB 记录结构
其中在InnoDB 行格式-->COMPACT 行格式-->记录的真实数据小节这里有以下内容:
InnoDB 在读记录的变长字段长度列表时先查看表结构,如果某个变长字段允许存储的最大字节数大于 255 时,该怎么区分它正在读的某个字节是一个单独的字段长度还是半个字段长度呢?设计 InnoDB 的大叔使用该字节的第一个二进制位作为标志位:如果该字节的第一个位为 0 ,那该字节就是一个单独的字段长度(使用一个字节表示不大于 127 的二进制的第一个位都为 0 ),如果该字节的第一个位为 1 ,那该字节就是半个字段长度。
如果需要 1 位来作为标志位,那么两个字节时剩 15 位可以用来表示长度了。也就是长度为 2^15-1=32767 。
但实际
CREATE TABLE varchar_size_demo(
c VARCHAR(65532)
) CHARSET=ascii ROW_FORMAT=Compact;
却是可以成功的。
这不就互相矛盾了么。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.