mysql text类型能存多少字_MySQL一行能存多少列,65535了解下

5884b80ec810824ae5c95987955344df.png
  • MySQL表具有65,535字节的最大行大小限制,即使存储引擎能够支持更大的行也是如此。
  • 对于默认的16KB InnoDB页大小,最大行大小略小于8KB 。对于64KB页,最大行大小略小于16KB。如果包含可变长度列(例如:text)的InnoDB 行超过最大行大小,InnoDB选择可变长度列进行页外存储。

MySQL对表设计时候,肯定有小伙伴遭遇表字段一多,而设计又烂的话,会发现表无法创建,错误如下:

mysql

更改列为 TEXT可以避免MySQL 65,535字节的行大小限制,而InnoDB 变长列的页外存储可以避免 InnoDB行大小限制。

mysql

变长限制

可变列的长度要计算字符集

  • 设置允许 NULL 需要占用1个字节
  • 设置为变长(varchar)需要占用2个字节,char 由于定长不占

实际长度为 32765+2[变成加2字节] 和 32766+2 ,正好是65535,没有超出限制

mysql

创建表的语句t2失败是因为,尽管列长度在最大长度65,535字节之内,但仍需要两个额外的字节来记录该长度,这会导致行大小超过65,535字节

mysql

设置为允许 null

实际长度为 32765+2[变成加2字节]+1[允许null加1字节] 和 32766+2 ,超出65535限制了

mysql

字符集差异

设置字符集为 utf8 ,如下语句由于 21845 * 3 + 2【变长需要加2字节】= 65537 > 65535,因此创建失败

mysql

由于设置为 21844,而字符集为 utf8 ,因此 21844 * 3 + 2 = 65534,因此能正常创建

mysql

utf8mb4同理,不过是 * 4

单行8126限制

  • innodb 一个 page 至少需要存放2行,单行有 8126的限制
  • 若t5表如果写入全为255字节的数据同样会报8126错误
mysql
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值