前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 表列数和行大小有哪些限制?

MySQL 表列数和行大小有哪些限制?

作者头像
码农架构
发布2021-05-08 16:19:00
5.8K0
发布2021-05-08 16:19:00
举报
文章被收录于专栏:码农架构码农架构
列数限制

MySQL对每个表有4096列的硬限制,但是对于给定的表,有效最大值可能会更少。确切的列限制取决于几个因素:

  • 表的最大行大小限制了列的数量(可能还有大小),因为所有列的总长度不能超过该大小
  • 个列的存储要求限制了给定最大行大小内的列数。某些数据类型的存储要求取决于存储引擎,存储格式和字符集等因素
  • 存储引擎可能会施加其他限制表列计数的限制。例如, InnoDB每个表的限制为1017列
  • 功能键部分被实现为隐藏的虚拟生成的存储列,因此表索引中的每个功能键部分都计入表的总列数限制。
行大小限制

给定表的最大行大小由几个因素决定:

  • MySQL表的内部表示具有65,535字节的最大行大小限制,即使存储引擎能够支持更大的行也是如此。BLOBTEXT列仅有助于朝向行大小限制9〜12字节,因为它们的内容是从该行的其余部分分开存储。
  • InnoDB 对于4KB,8KB,16KB和32KBinnodb_page_size 设置,表 的最大行大小(适用于本地存储在数据库页面内的数据)略小于页面的一半 。例如,对于默认的16KBInnoDB页面大小,最大行大小略小于8KB 。对于64KB页面,最大行大小略小于16KB
  • 如果包含 可变长度列的InnoDB 行超出最大行大小,请InnoDB选择可变长度列进行外部页外存储,直到该行适合InnoDB 行大小限制。对于行外存储的变长列,本地存储的数据量因行格式而异。
  • 不同的存储格式使用不同数量的页面标题和尾部数据,这会影响行可用的存储量(这里不做展开,感兴趣的可以查阅官网了解详情)
行大小限制案例

在下面的MyISAM例子中,改变柱TEXT 避免了65535字节的行大小限制,并且允许成功,因为操作 BLOB和 TEXT列仅有助于朝向行大小9至12个字节。

操作成功执行InnoDB 表,因为更改列以 TEXT避免MySQL 65,535字节行大小限制,并且InnoDB 可变长度列的页外存储避免了 InnoDB行大小限制。

可变长度列的存储包括长度字节,它们被计入行大小。例如, VARCHAR(255) CHARACTER SET utf8mb3列需要两个字节来存储值的长度,因此每个值最多可以占用767个字节。

t1 由于列需要32,765 + 2个字节和32,766 + 2个字节,因此 创建表的语句成功,最大行大小为65,535字节:

将列长度减少到65,533或更少可允许语句成功。

对于MyISAM表, NULL列需要行中的额外空间才能记录其值 NULL。每NULL 列需要一位额外的值,向上舍入到最接近的字节。

创建表的语句t3失败,因为除了可变长度列长度字节所需的空间之外,还MyISAM需要NULL列的空间,导致行大小超过65,535字节:

InnoDB将行大小(对于数据库页面中本地存储的数据)限制为略小于4KB,8KB,16KB和32KB innodb_page_size 设置的数据库页面的一半,对于64KB页面,将行大小限制 为略小于16KB。

t4由于定义的列超过16KB InnoDB页面的行大小限制,因此 创建表的语句失败。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 列数限制
  • 行大小限制
    • 行大小限制案例
    相关产品与服务
    云数据库 SQL Server
    腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档