在 MySQL 5.6 中,我遇到了以下问题:
对于在 ROW_FORMAT=DYNAMIC 或 ROW_FORMAT=COMPRESSED 中创建的表,BLOB、TEXT 或 VARCHAR 列的值可能完全在页外存储,具体取决于它们的长度和整行的长度。对于页外存储的列,聚集索引记录仅包含指向溢出页的 20 字节指针,每列一个。
为什么外部存储的 blob 需要 20 字节的指针?我认为地址空间不会那么大。
行内存储的数据在此处定义:
https://github.com/jeremycole/mysql/blob/master/storage/innobase/include/btr0cur.h#L762
它写在这里:
https://github.com/jeremycole/mysql/blob/master/storage/innobase/btr/btr0cur.c#L4504
所以写入的字段是(总共 20 个字节):