mysql 行溢出

mysql 每日一问之行溢出

mysql 行存储形式

  • Compact:Compact是一种紧凑的行格式,设计的初衷就是为了让一个数据页中可以存放更多的数据行
  • Redundant
  • Dynamic
  • Compress

MySQL单行能存储多大体量的数据?

在MySQL的设定中,单行数据最大能存储65535byte的数据(注意是byte,而不是字符)!!

mysql> create table t_cat ( name varchar(65535)) engine=innodb charset=utf8mb4;
ERROR 1074 (42000): Column length too big for column 'name' (max = 16383); use BLOB or TEXT instead

mysql> select 65536/4;
+------------+
| 65536/4    |
+------------+
| 16384.0000 |
+------------+
1 row in set (0.00 sec)

在 utf8mb4 字符集下,一个汉字占4个字节 65536/4=16383 个汉字

什么是行溢出?

如果数据页默认大小为16KB,换算成byte:16*1024 = 16384 byte

也就是说:

  • 假如你要存储的数据行很大超过了65532byte那么你是写入不进去的

  • 假如你要存储的单行数据小于65535byte但是大于16384byte,这时你可以成功insert,但是一个数据页又存储不了你插入的数据。这时肯定会行溢出

行溢出处理

在MySQL设定中,当varchar列长度达到768byte后,会将该列的前768byte当作prefix存放在行中,多出来的数据溢出存放到溢出页中,然后通过一个偏移量指针将两者关联起来,这就是行溢出机制

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值