10.4 限制表的列数和行的大小

官方地址: http://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html

每个表中硬性规定,就是最多只允许存储4096个列,有效的最大值可能小于给定的表,确切的限制取决于几个相互作用的因素。

1.每个表(不关心存储引擎)单行最大值占65535字节。存储引擎可能会在这个限制上放置额外的约束,以减少有效的最大行大小。

最大行大小限制了咧的数量(可能存储大小),因为所有列的总长度不能超过这个大小

例如: 每个UTF8字符需要3个字节。

所以一个char(255) UTF8 字符集的列。服务器必须为每个值分配 255 x 3 = 765字节,因此,一个表不能包含65535 / 765 = 85 个这样的列。

可变长度列的存储包括长度和字节。这是对行大小的评估。

例如,一个varchar(255) UTF8字符集的列需要两个字节来存储值得长度。

所以每个值可以占用767个字节。

BLOB 和 TEXT 字段计数, 因为它们的内容分别存储在该行的其余部分中。

对每行大小的限制,从1到4 + 8字节的数值。

声明列的NULL值可以减少允许列的最大数量值。

对于MyISAM表,NULL列需要额外的空间来记录它们的行是否值是NULL。每个NULL列需要一个额外的,四舍五入到最近的字节

字节的最大行长度可以计算如下:

row length = 1

+ (sum of column lengths)

+ (number of NULL columns + delete_flag + 7)/8

+ (number of variable-length columns)

delete_flag = 1 是静态的格式表。静态表在行记录中使用一个bit表示,指示该行是否已经被删除的标识位。

delete_flag 0 动态表,因为flag标识 存储的动态行标头。

对于MyISAM表格式的信息,请参见第16.2.3,“MyISAM表的存储格式”。

在InnoDB表中,是NULL列还是非NULL列,存储大小相同。所以前面的计算不适用。

下面的语句创建t1表成功,因为列需要 32,765 + 2 字节 和 32,766 + 2 字节,

他最大行大小为 65535字节。

mysql> CREATE TABLE t3

-> (c1 VARCHAR(65535) NOT NULL)

-> ENGINE = MyISAM CHARACTER SET latin1;

ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs

减少列长度从65533甚至更少可以创建成功。

2.单个存储引擎可能会对限制表列数施加额外的限制。例如:

(1)InnoDB 允许多达 1000个列。

(2)InnoDB 限制行大小略少于一半的数据库页为4KB,8KB、16KB、32KB的页面大小。对于一个64KB页面大小限制,InnoDB行大小约16000字节。

针对可变长度列(VARBINARY, VARCHAR, BLOB, and TEXT) 行大小限制不同。

(3)不同的InnoDB存储格式(COMPRESSED、REDUNDANT)使用不同数量的页面头部和尾部的数据,它影响行的存储量。

时间: 2024-10-14 12:36:24

10.4 限制表的列数和行的大小的相关文章

JAVA使用POI获取Excel的列数与行数

Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能. 下面这篇文章给大家介绍了JAVA使用POI获取Excel列数和行数的方法,有需要的朋友们可以参考借鉴,下面来一起看看吧. 前言 报表输出是Java应用开发中经常涉及的内容,而一般的报表往往缺乏通用性,不方便用户进行个性化编辑.Java程序由于其跨平台特性,不能直接操纵Excel.因此,本文探讨一下POI视线Java程序

Java获得数据库查询结果的列数和行数,打印查询结果

Java连接数据库及简单操作见我以前的一篇随笔:http://www.cnblogs.com/meitian/p/5036332.html 一.获取查询结果的行数和列数 查询结果为ResultSet对象 ResultSet selectresult = this.executequery(sql_temp); 查看列数: int column_count=selectresult.getMetaData().getColumnCount(); getMetaData()返回了所有列信息 getM

POI获取Excel列数和行数的方法

//获取指定行,索引从0开始 hssfRow=hssfSheet.getRow(1); //获取指定列,索引从0开始 hssfCell=hssfRow.getCell((short)6); //获取总行数 //int rowNum=hssfSheet.getLastRowNum(); //获取一个excel表格中的总记录数 int rowNum=storagesList.size(); //获取总列数 int columnNum=hssfRow.getPhysicalNumberOfCells(

做一个列数等于行数的三角形

lie=int(input('lie:'))#实际上就是输出有多少行就有多少列,所以这个输入没啥用hang=int(input('hang:'))phang=1while phang<=hang: plie=1 while plie<=phang: print('*',end='') plie+=1 phang+=1 print() 再来一个倒着的 lie=int(input('lie:'))#同样没啥用hang=int(input('hang:'))phang=hangwhile phang

c语言:实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定

实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定, 输入9,输出9*9口诀表,输出12,输出12*12的乘法口诀表. 程序: #include<stdio.h> void mul(int n)//multiplication 乘法 { int i, j; for (i = 1; i <= n; i++) { for (j = 1; j <= i; j++) { printf("%d*%d=%-2d  ", i, j, i*j); //其中%2d中的2表示

静态html页面 ul+li模拟table,减少代码冗余,列数切换更方便

先直接上效果图: 二.帖代码 1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="Author" content="haley"> 6 <meta name="Keywords" content="表格"&

awk 打印行号和打印列数

打印行号 # awk '{print NR,$0}' emp.data 1 Beth 4.00 02 Dan 3.75 03 Kathy 4.00 104 Mark 5.00 205 Mary 5.50 226 SUsie 4.25 18 打印列数 # awk '{print NF,$0}' emp.data 3 Beth 4.00 03 Dan 3.75 03 Kathy 4.00 103 Mark 5.00 203 Mary 5.50 223 SUsie 4.25 18 原文地址:https

vue中 表头 th 合并单元格,且表格列数不定的动态渲染方法

吐槽 今天,在vue中遇到 复杂表格的渲染 ,需要合并表头th的单元格,且合并单元格的那列的表头数据是动态数据,也就是不知道会有多少个表头列,而这几个表头列还分了好几个子表头. 这个需求在js里用Juicer模板很好做的,思路我是有的,但就是对于vue,我也算初学者,很多概念不是很懂,这就限制了思路. 在网上搜了很多合并单元格的都是简单的数据合并,也就是td合并, 不是我们的需求,就不贴了. 哎,废话不多说了,看代码吧: 代码示例 使用iviewui的table组件: 最初,直接使用项目中的iv

【python cookbook】【字符串与文本】16.以固定的列数重新格式化文本

问题:重新格式化一些很长的字符串,以指定的列数来显示 解决方案:textwrap模块的fill()方法来实现 # A long string s = "Look into my eyes, look into my eyes, the eyes, the eyes, the eyes, not around the eyes, don't look around the eyes, look into my eyes, you're under." import textwrap pr