首页  

TIDB单条记录大小限制     所属分类 TIDB 浏览量 14
select version()
8.0.11-TiDB-v8.5.2-20250707-57b0825

单条记录 写入json数据报错 

java.sql.SQLException: entry too large, the max entry size is 6291456, the size of data is 6402981\n; 
uncategorized SQLException; SQL state [HY000]; error code [8025]; 
entry too large, the max entry size is 6291456, the size of data is 6402981

这个错误是由于向 TiDB 插入的数据条目超过了其最大限制导致的。
TiDB 默认的单条数据最大大小为 6MB(6291456 字节),而你当前要插入的数据大小为 6402981 字节(约 6.1MB),超过了这个限制。

解决办法如下:

1. 拆分大数据条目(推荐):
将超过限制的单条数据拆分成多条 smaller 的数据,确保每条数据大小不超过 6MB。
这是最合规且稳定的方案,符合 TiDB 的设计规范。


2. 调整 TiDB 配置(需谨慎):
若业务确实需要插入超过默认限制的大条目,可以通过修改 TiDB 的配置参数 max-entry-size 来调整最大限制(单位:字节)。
例如,将其调整为 8MB(8388608 字节):
在 TiDB 配置文件中添加或修改:
toml
[storage]
max-entry-size = 8388608
重启 TiDB 集群使配置生效

注意:
扩大此限制可能会影响 TiDB 的性能和稳定性(如增加内存占用、延长事务处理时间等),需评估业务风险后再操作。


MySQL 对单条记录(行)的大小有明确限制,核心限制来源于两个方面: 存储引擎的单页大小和InnoDB 的行格式设计。 1. 核心限制:约 65535 字节(64KB) MySQL 规定,单条记录中所有字段的总长度(不包含 TEXT/BLOB 等大字段)不能超过 65535 字节。 这个限制是 MySQL 服务器层的约束,与存储引擎无关,主要针对 VARCHAR、CHAR、INT 等非大字段类型。 例如: 若表中包含一个 VARCHAR(65535) 字段,且字符集为 latin1(单字节),则该字段本身已达上限,无法再添加其他字段。 若使用 utf8mb4 字符集(每个字符最多 4 字节),则 VARCHAR 最大实际可存储字符数为 65535 / 4 ≈ 16383(需预留 2 字节存储长度信息,实际略小) 2. InnoDB 存储引擎的额外限制 InnoDB 是 MySQL 最常用的存储引擎,其对单条记录的限制更严格: 单页大小限制:InnoDB 默认页大小为 16KB(16384 字节),要求单条记录(包含所有字段)必须能放入一个数据页中。 因此,InnoDB 单条记录的实际最大长度约为 16KB(若开启压缩,可能略有浮动,但本质仍是单页限制)。 大字段(TEXT/BLOB)的特殊处理:TEXT、BLOB 等大字段不会完全存储在数据页中, 仅在记录中保存前 768 字节的前缀,剩余内容存储在独立的 “溢出页” 中。 因此,即使包含大字段,只要非溢出部分(前缀 + 其他字段)不超过 16KB,记录就能正常存储。 总结 非大字段(VARCHAR/CHAR 等): 总长度 ≤ 65535 字节(服务器层限制),且在 InnoDB 中需 ≤ 16KB(单页限制) 包含大字段(TEXT/BLOB): 记录的 “非溢出部分” 需 ≤ 16KB(InnoDB 单页限制),大字段的完整内容可更大(但受限于表空间大小) 若插入记录时提示 “Row size too large”, 通常是因为非大字段总长度超过了 16KB,需优化字段类型(如缩短 VARCHAR 长度、拆分表等)

上一篇     下一篇
文字红色填充、黑色边框效果 css写法

SpringBoot 接口返回long类型数据注意点

ETF抄底逃顶量化投资工具 布林通道 和 四分位距

三句话,读懂《论持久战》