新部署的一套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上,可以正常插入同样的表中
问题分析:
根据错误提示 "Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126",这个问题是由于MySQL 8.0.29版本中的表行大小限制导致的。在此版本中,行的最大大小为8126字节,不包括BLOB列和其他存储开销。
解决方案:
要解决这个问题,有几个可能的解决方案可以尝试:
修改表的行格式: 首先,请确认表的行格式是否为 DYNAMIC
或 COMPRESSED
。可以通过执行以下命令来查看当前表的行格式: sql SHOW CREATE TABLE xx;
如果行格式不是 DYNAMIC
或 COMPRESSED
,可以尝试将其修改为 DYNAMIC
类型,因为 DYNAMIC
类型可以支持更大的行大小。执行以下命令修改行格式: sql ALTER TABLE xx ROW_FORMAT=DYNAMIC;
修改后,再次尝试执行插入字段的命令。
减小字段的大小: 如果插入的字段大小不是关键,可以将字段的长度减小为更小的值。例如,将 varchar(10)
修改为 varchar(5)
或更小的长度。执行以下命令修改字段的长度: sql ALTER TABLE xx MODIFY COLUMN zz varchar(5);
修改后,再次尝试执行插入字段的命令。
将某些字段改为 TEXT 或 BLOB 类型: 如果以上两个解决方案都不适用,那么可能需要将某些字段类型更改为 TEXT 或 BLOB 类型。这些类型不计入行的大小限制。但请注意,这样做可能会影响应用程序的查询性能,因为 TEXT 和 BLOB 类型的字段存储在独立的页中,需要额外的操作来访问它们。执行以下命令将字段类型更改为 TEXT 或 BLOB: sql ALTER TABLE xx MODIFY COLUMN zz TEXT;
或者 sql ALTER TABLE xx MODIFY COLUMN zz BLOB;
修改后,再次尝试执行插入字段的命令。
如果上述解决方案都不适用,那可能需要进一步检查表的设计和数据模型,以确定是否需要重新设计表结构或优化数据存储方式。
注意: 在执行任何修改表结构的操作之前,请务必备份数据库,以防止意外数据丢失。
表字段太多了吧