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

PostgreSQL堆表元组中varchar属性值存储格式疑问

PostgreSQL堆表元组中varchar存储前缀的含义

PostgreSQL中varchar属于变长类型,采用varlena结构存储,短长度数据(≤126字节)的存储规则如下:

  • 第一个字节为长度前缀:最高位固定为0,剩余7位代表数据部分的字节长度(不含前缀本身)
  • 前缀之后的字节为实际的文本数据内容

针对你观察到的现象:

  • 对于'cat'的存储值\x09636174:
    前缀0x09转十进制为9,表示数据部分的字节长度是9。你看到的636174(对应'cat'的3字节ASCII码)只是数据的一部分,剩余6字节应为填充的空字节(0x00),大概率是插入时数据包含额外空白字符,或是存在触发器自动将varchar(10)字段填充到最大长度。
  • 对于'x'的存储值\x0578:
    前缀0x05转十进制为5,表示数据部分的字节长度是5。你看到的78(对应'x'的1字节ASCII码)仅为数据的一部分,剩余4字节为填充的空字节。

如果确认插入的是无额外空白的纯'cat'和'x',可以用pg_column_size(value)函数查看字段的实际存储总字节数,验证是否与前缀标识的长度匹配,同时检查表上是否存在触发器或自定义逻辑修改了存储数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:34:50