如果列为null,是否会影响列使用的空间?使用的空间是否由列定义固定?这是因数据库而异.(我主要对SQL Server 2000感兴趣.)
澄清:这个问题与该专栏"可空"时会发生什么有关(这与Kritsen&gbn指出的另一点相关).问题是,当列实际为空(在某个特定行中)时是否存在任何保存.
...
Cadaeic为SQL Server提供了答案,在2008版本之前,SQL Server似乎没有节省成本,而根据Quassnoi,如果空列结束,您可以节省Oracle.谢谢你的答案,他们都很有帮助.
在列中存储NULL不会特别花费或节省空间.对于固定长度数据,仍保留整个空间.
另一方面,可变长度数据仅需要数据的长度加上开销来存储实际长度.例如,VARCHAR(n)将使用2个字节的数据来指示实际长度,因此所需的存储空间始终为n + 2.
另外,应该提到的是,如果SET ANSI_PADDING ON,具有NULL值的char(n)将表现为VARCHAR(n).
无论如何,在使用SQL Server 2000或SQL Server 2005时,您将无法识别存储NULL的空间"节省".SQL Server 2008引入了稀疏列的概念,可以为主要为NULL的列节省成本.
SQL Server有一个指示NULL的位.如果列定义为NOT NULL,则不使用此位
VARCHAR使用可变长度来存储数据(因此具有指示实际数据有多长的开销),而CHAR是固定宽度.
因此,在此基础上,CHAR(1)NOT NULL比VARCHAR(1)NOT NULL"更短",因为VARCHAR需要长度指示符,而CHAR将始终只使用一个字节.
编辑:请注意,有一个允许NULL的BIT字段需要两位来存储它!我经常看到没有考虑过的BIT字段,不需要存储NULL但是没有设置为NOT NULL因此无意中浪费了一些