
空值是不占用空间的,但是NulL值是占用空间的。那就是说空值是无,NulL本身就是代表着“NulL”的意思,故NulL是另外一种含义的值。
平常使用sqlite数据库时会遇到判断字段值是否为空的情况,一般来说只要跟空值比较就行。但是今天有一个新同事说如果跟NulL值比较是否也可以?针对这种情况,现简单分析一下:
sqlite 的 NulL 是用来表示一个缺失数值的项。表中的一个 NulL 值在字段中显示为空白,就是不带值的字段。NulL 值与零值或包含空格的字段是不同的。空值是不占用空间的,但是NulL值是占用空间的。那就是说空值是无,NulL本身就是代表着“NulL”的意思,故NulL是另外一种含义的值。
假设有一个表version:
create table version ( ver text not null,-- 版本 *键** create_at timestamp default(datetime('Now','localtime')),-- 创建时间 yyyy-mm-dd hh:nn:ss col1 text not null,col2 text,-- 测试 primary key (ver) );
插入数据:
INSERT INTO version(ver,col1,col2) VALUES (2.0,2,NulL) INSERT INTO version(ver,col2) VALUES (3.0,'',NulL) 结果如下图(绿色是空值,灰色是NulL值):
字段col1是not null的,insert NulL值会怎样呢?
insert空值”呢?
那说明字段定义为NOT NulL 的是不能插入NulL值的,只能插入空值”。
查询数据:
select * from version where col1 is not NulL
select * from version where col1 <> ''
结论:
要想判断字段值是否是空值,不能通过NulL值进行筛选查询,必须要通过空值判断才行。
如果想要通过NulL查询,则语句改为
select * from version where col2 is not NulL
另外,因为NulL不是空值,要占用空间,所以在语句进行查询比较时,NulL会包含在字段的筛选比较中,对效率会有一定的影响。而且B树索引不会存储NulL值,所以如果索引的字段为NulL时,索引的效率会下降很多。
总结以上是内存溢出为你收集整理的Sqlite中的NULL值和空值的比较全部内容,希望文章能够帮你解决Sqlite中的NULL值和空值的比较所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)