当前位置:网站首页>MySQL innodb每行数据长度的限制
MySQL innodb每行数据长度的限制
2022-06-29 09:26:00 【一缕阳光a】
今天在使用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.
边栏推荐
猜你喜欢
随机推荐
Codeforces Round #641 Div2
Codeforces Round #657 Div. 2
L1-009 sum of N numbers (20 points)
函数指针、函数指针数组、计算器+转移表等归纳总结
时变和非时变
1147 Heaps (30 分)
2019.11.13训练总结
【51nod 1215】数组的宽度
两个栈的模拟题
Pointer functions and function pointers
CodeForces - 1151B 思维
The stones game
JNI.h说明
2019.10.30 learning summary
Talk about threads and concurrency
HDU 6778 Car (分组枚举-->状压 dp)
自定义控件之侧滑关闭 Activity 控件
1021 deep root (25 points)
The Stones Game【取石子博弈 & 思维】
Dsolve function of sympy









