mysql null 与_MySQL:NULL与“”

对于MyISAM表,NULL为每一行的每个NULLABLE列创建一个额外的位(空位)。 如果该列不是NULLABLE,则永远不需要额外的信息。 但是,它被填充为8位字节,因此您总是获得1 + mod 8字节的NULLABLE列数。 1个

文本列与其他数据类型略有不同。 首先,对于“”,表条目保存字符串的两个字节长度,后跟字符串的字节,并且是变体长度结构。 在NULL的情况下,不需要长度信息,但是无论如何它都是列结构的一部分。

在InnoDB中,NULL不占空间:它们根本不存在于数据集中。 空字符串也是如此,因为数据偏移量也不存在。 唯一的区别是,NULL将设置为NULL,而空字符串则不会。 2

当数据实际放置在磁盘上时,NULL和''在两种数据类型中都占据完全相同的空间。 但是,在搜索值时,检查NULL的速度比检查''的速度要快一些,因为您不必在计算中考虑数据长度:您只需检查空位。

由于NULL和''的空间差异,除非将该列指定为可空值,否则NULL和”的大小不会影响。 如果该列不是NOT NULL,则仅在MyISAM表中您会看到任何性能差异(然后,很明显,默认NULL无法使用,因此这是一个有争议的问题)。

然后,真正的问题归结为应用程序对“此处未设置值”列的解释。 如果“”是有效值,表示“用户在此处未输入任何内容”或类似的内容,则默认NULL是可取的,因为当您输入的记录中没有数据时,您希望在NULL和“”之间进行区分。

通常,默认情况下,缺省值仅对重构数据库有用,当新值需要对旧数据生效时。 同样,在这种情况下,选择取决于如何解释应用程序数据。 对于某些旧数据,NULL非常适合且最合适(该列之前不存在,因此现在具有NULL值!)。 对于其他情况,“”更合适(通常在查询使用SELECT *且NULL导致崩溃问题时使用)。

在ULTRA-GENERAL TERMS(以及从哲学的角度来看)中,NULLABLE列的默认值NULL是首选的,因为它提供了“未指定任何值”的最佳语义解释。

1 [[HTTP://forge.MySQL.com/wiki/MySQL_internals_MyISAM]]

2 [[HTTP://forge.MySQL.com/wiki/MySQL_internals_InnoDB]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值