为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL,最好插入NULL或空字符串?

MySQL,最好插入NULL或空字符串?

梵蒂冈之花 2019-12-10 13:08:56
我在一个网站上有一个表格,该表格有很多不同的领域。一些字段是可选的,而某些字段是必填的。在我的数据库中,我有一个包含所有这些值的表,是否将NULL值或空字符串插入用户未放置任何数据的DB列中是更好的做法?
查看完整描述

3 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

通过使用,NULL您可以区分“不输入数据”和“不输入数据”。


更多区别:


一个LENGTH的NULL就是NULL,一个LENGTH空字符串的是0。


NULLs在空字符串之前排序。


COUNT(message)将计算空字符串,但不计算NULLs


您可以使用绑定变量搜索空字符串,但不能搜索NULL。该查询:


SELECT  *

FROM    mytable 

WHERE   mytext = ?

无论您从客户端传递的值如何,都永远不会匹配NULLin mytext。要匹配NULLs,您必须使用其他查询:


SELECT  *

FROM    mytable 

WHERE   mytext IS NULL



查看完整回答
反对 回复 2019-12-11
?
万千封印

TA贡献1891条经验 获得超3个赞

如果您计划切换数据库,则要考虑的一件事是Oracle不支持空字符串。它们会自动转换为NULL,您无法使用诸如这样的子句查询它们WHERE somefield = ''。

查看完整回答
反对 回复 2019-12-11
?
RISEBY

TA贡献1856条经验 获得超5个赞

要记住的一件事是,NULL可能会使您的代码路径困难得多。例如,在Python中,大多数数据库适配器/ ORM都映射NULL到None。


这样的事情:


print "Hello, %(title)s %(firstname) %(lastname)!" % databaserow

可能会导致“您好,没有Joe Doe!” 为了避免这种情况,您需要类似以下代码的内容:


if databaserow.title:

    print "Hello, %(title)s %(firstname) %(lastname)!" % databaserow

else:

    print "Hello, %(firstname) %(lastname)!" % databaserow

这会使事情变得更加复杂。



查看完整回答
反对 回复 2019-12-11
  • 3 回答
  • 0 关注
  • 382 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信