Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何理解mysql中的这句话:每一个空列需要额外的一点_Mysql_Null_Myisam - Fatal编程技术网

如何理解mysql中的这句话:每一个空列需要额外的一点

如何理解mysql中的这句话:每一个空列需要额外的一点,mysql,null,myisam,Mysql,Null,Myisam,在mysql手册中:在上面的链接中有一个示例,示例代码粘贴在下面 手册说,每个空列取一位,四舍五入到最近的字节 我不明白,例如下面的例子,我认为2个空列需要2位,并舍入到1字节。32765+32766+1=65532,但实际上mysql发生了行大小超过65535的错误,我的想法有什么不对?请指出 CREATE TABLE t3 (c1 VARCHAR(32765) NULL, c2 VARCHAR(32766) NULL) ENGINE = MyISAM CHARACTER SET latin1

在mysql手册中:在上面的链接中有一个示例,示例代码粘贴在下面

手册说,每个空列取一位,四舍五入到最近的字节

我不明白,例如下面的例子,我认为2个空列需要2位,并舍入到1字节。32765+32766+1=65532,但实际上mysql发生了行大小超过65535的错误,我的想法有什么不对?请指出

CREATE TABLE t3
(c1 VARCHAR(32765) NULL, c2 VARCHAR(32766) NULL)
ENGINE = MyISAM CHARACTER SET latin1;
结果:

错误1118(42000):行大小太大。所用数据的最大行大小 表类型(不包括BLOB)为65535。这包括存储开销, 检查手册。您必须将某些列更改为文本或blob

希望有人能用简单的语法解释清楚,我的英语不好,非常感谢

因为没有“column value”对应于
NULL
,MySQL使用一个额外的标志来指示该列是
NULL
。(在这种情况下,“列值”区域中的任何数据都会被忽略,因为“它们不在那里”。)

说真的,如果遇到行大小限制,可能需要重新考虑表的设计。(是否有“重复组?”列名,如
name\u 23、name\u 24…
?)数据可以分为多个表。等等架构限制应该“足够大。”

请参见

对于(latin1)VARCHAR(L),如果列值需要0,则所需的存储为“L+1字节”− 255字节,如果值可能需要超过255字节,则为L+2字节”


因此,列的长度每增加2个字节,加上表的null标志增加1个字节。这是32765+2+32766+2+1=65536

文档中的关键语句是这包括存储开销。很明显,您超过了65K,否则将允许您的活动。