mysql 空位补0_MySQL:NULL vs""

James..

54

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

文本列与其他数据类型略有不同.首先,对于"",表条目保存字符串的两个字节长度,后跟字符串的字节,并且是变量长度结构.在NULL的情况下,不需要长度信息,但它仍然作为列结构的一部分包含在内.

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

当数据实际布局在磁盘上时,NULL和''在两种数据类型中完全占用相同的空间.但是,当搜索该值时,检查NULL会比检查''稍微快一些,因为您不必考虑计算中的数据长度:您只检查空位.

由于NULL和''空格不同,NULL和''没有SIZE IMPACT,除非指定列是否为NULL.如果列是非NULL,只有在MyISAM表中才会看到任何性能差异(然后,显然,不能使用默认的NULL,因此这是一个没有实际意义的问题).

真正的问题归结为"没有设置值"列的应用解释.如果""是一个有效值,意思是"用户在此处输入任何内容"或某些内容,则默认为NULL,因为您希望在输入没有数据的记录时区分NULL和"".

通常,默认实际上只对重构数据库有用,因为新值需要对旧数据生效.在这种情况下,再次,选择取决于如何解释应用程序数据.对于某些旧数据,NULL非常合适且最适合(列之前不存在,因此它现在具有NULL值!).对于其他人来说,""更合适(通常在查询使用SELECT*和NULL时会导致崩溃问题).

在ULTRA-GENERAL TERMS中(以及从哲学角度来看)NULLABLE列的默认NULL是首选,因为它提供了"No Value Specified"的最佳语义解释.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值