mysql插入字段时报错Row size too large

新部署的一套mysql8.0.29。往xx表中插入字段时,alter table xx add column zz varchar(10); 提示Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some c
olumns to TEXT or BLOBs。同样的命令,我在本地的8.0.27的mysql上,可以正常插入同样的表中

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    问题分析:

    根据错误提示 "Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126",这个问题是由于MySQL 8.0.29版本中的表行大小限制导致的。在此版本中,行的最大大小为8126字节,不包括BLOB列和其他存储开销。

    解决方案:

    要解决这个问题,有几个可能的解决方案可以尝试:

    1. 修改表的行格式: 首先,请确认表的行格式是否为 DYNAMICCOMPRESSED。可以通过执行以下命令来查看当前表的行格式: sql SHOW CREATE TABLE xx; 如果行格式不是 DYNAMICCOMPRESSED,可以尝试将其修改为 DYNAMIC 类型,因为 DYNAMIC 类型可以支持更大的行大小。执行以下命令修改行格式: sql ALTER TABLE xx ROW_FORMAT=DYNAMIC; 修改后,再次尝试执行插入字段的命令。

    2. 减小字段的大小: 如果插入的字段大小不是关键,可以将字段的长度减小为更小的值。例如,将 varchar(10) 修改为 varchar(5) 或更小的长度。执行以下命令修改字段的长度: sql ALTER TABLE xx MODIFY COLUMN zz varchar(5); 修改后,再次尝试执行插入字段的命令。

    3. 将某些字段改为 TEXT 或 BLOB 类型: 如果以上两个解决方案都不适用,那么可能需要将某些字段类型更改为 TEXT 或 BLOB 类型。这些类型不计入行的大小限制。但请注意,这样做可能会影响应用程序的查询性能,因为 TEXT 和 BLOB 类型的字段存储在独立的页中,需要额外的操作来访问它们。执行以下命令将字段类型更改为 TEXT 或 BLOB: sql ALTER TABLE xx MODIFY COLUMN zz TEXT; 或者 sql ALTER TABLE xx MODIFY COLUMN zz BLOB; 修改后,再次尝试执行插入字段的命令。

    如果上述解决方案都不适用,那可能需要进一步检查表的设计和数据模型,以确定是否需要重新设计表结构或优化数据存储方式。

    注意: 在执行任何修改表结构的操作之前,请务必备份数据库,以防止意外数据丢失。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

表字段太多了吧