今天在使用MySQL innodb时,create table时,报出这样的一个错误:
Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs
查阅MySQL的官方资料才发现,每条记录有最大长度的。MySQL的官方文档:
链接:https://dev.mysql.com/doc/refman/8.0/en/column-count-limit.html#row-size-limits

在MySQL innodb中,所有的数据都是按页(page)来操作的,一页就是16KB(默认的),采用B+树作为索引,B+树中每个节点都是16KB,在最底层的每个叶子节点中存储数据,以主键索引为例,如果每个叶子节点为16KB,那么一行数据超过16KB时,就会出现行溢出,溢出的数据放到另一个page中,即uncompresse blob page
但是在B+树中,每个叶子节点page中至少存储2行数据,否则就失去了意义。那么一行数据的长度就是小于8KB,在一行数据长度超过8KB时,innodb将会将剩余的部分数据写出到另一个溢出页中,该列的前768字节存放在该页中,同时有个偏移指向溢出页。
官方给出的解决方式:
1.垂直表字段拆分或者大字段合并(大字段最多不超过768,业务进行合并+拆分)
2.修改表的存储引擎,modify InnoDB to MyISAM.
3.修改row_format为COMPRESSED或者DYNAMIC,当然前提需保证innodb_file_format =Barracuda.
在使用MySQL InnoDB存储引擎时,遇到创建表时由于行大小超过限制导致的错误。MySQL官方文档指出,每条记录的最大长度有限制,超过8KB的数据会被存储到溢出页中。解决方法包括字段拆分、合并,转换存储引擎至MyISAM,或者调整ROW_FORMAT为COMPRESSED或DYNAMIC。理解这些限制对于优化数据库设计和性能至关重要。
4652

被折叠的 条评论
为什么被折叠?



