关于 MySQL 行格式的问题(《MySQL 是怎样运行的:从根上理解 MySQL》)

查看 69|回复 4
作者:dcsuibian   
书中第五章:从一条记录说起—— 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;
却是可以成功的。
这不就互相矛盾了么。

字节, innodb, 长度, MySQL

Flourite   
?现在是 dynamic 格式
mightybruce   
看这种书一定不要相信所有,我看了没有贴出 mysql 版本和源码, 另外书里的大多数东西就能在 mysql 官网上方找到,只不过多数人不看。
wuyiccc   
第一位 1 也算啊
wuyiccc   
第一位为 0 就是范围 0 ~ 127 (0 ~ 2^7-1)
第一位为 1 就是范围 128 (2^7) ~ 2^32
您需要登录后才可以回帖 登录 | 立即注册

返回顶部