1118 - 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 columns to TEXT or BLOBs

错误1118 - Row size too large通常在MySQL数据库中出现,尤其是在InnoDB存储引擎中。当您尝试创建或更改表,且该表的单行数据量大于InnoDB允许的最大值时,就会发生这个错误。

以下是一些建议的解决方法:

更改列数据类型:

如错误信息所述,将一些列的数据类型从VARCHAR或CHAR更改为TEXT或BLOB类型。这是因为TEXT和BLOB类型的数据存储在溢出页中,不计入行大小限制。

减少VARCHAR的长度:

如果您有某些列定义为VARCHAR(255),但实际上不需要这么长,您可以考虑减少这些列的长度。
使用其他存储引擎:

如果您的应用场景允许,可以考虑使用MyISAM存储引擎,但请注意,与InnoDB相比,MyISAM不支持事务和外键。

增加InnoDB的页大小:

默认情况下,InnoDB的页大小是16KB,但可以更改为32KB或64KB。这样做可以增加单行的最大大小。但这需要在初始化数据库实例时进行,并且会影响整个数据库的性能和空间使用,所以请谨慎考虑。

innodb_page_size=32k

分拆表结构:

考虑将表结构分拆为多个表,以减少单一表的列数量。

检查其他存储相关参数:

例如,确保innodb_strict_mode设置为OFF,但这可能会使其他一些限制变得宽松,所以需要谨慎使用。
最后,请确保在进行任何更改之前备份您的数据,并在测试环境中先进行测试,以确保更改不会导致其他问题。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐