You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL列溢出的识别与区分机制:技术问询

MySQL Compact行格式下溢出列的判断机制

在Compact行格式中,MySQL通过变长字段长度列表的特殊标记来区分字段是否溢出,核心逻辑如下:

  • 对于varchar这类变长字段,MySQL会在记录头部维护一个「变长字段长度列表」,用来存储每个变长字段的长度:
    • 当字段长度≤255字节时,用1字节存储长度;长度>255时,用2字节存储。
    • 当字段发生溢出时,MySQL会把变长字段长度列表中对应的值设置为 真实长度 | 0x8000(即把2字节长度值的最高位设为1),这就是标记字段溢出的关键标识。

结合你的例子具体说明:

  1. 插入repeat('a',10000)时:
    字段真实长度是10000,触发溢出后,变长字段长度列表中存储的是10000 | 0x8000 = 0xA710(二进制最高位为1)。MySQL识别到这个标记后,就知道行内的788字节是「前768字节数据+20字节溢出页指针」,会自动去溢出页读取剩余内容。
  2. 插入repeat('a',788)时:
    字段真实长度是788,对应的2字节长度值是0x0314(最高位为0),MySQL判断这是行内存储的完整数据,不会去访问溢出页。

简单来说,变长字段长度的最高位就是溢出标识,这是MySQL区分两种场景的核心依据。

内容的提问来源于stack exchange,提问作者BaiTang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 11:43:14