我在一个数据库的很多字段上都看到了这个,我正在研究一个项目,其中一个列将被定义为非null,但是默认情况下会有一个空字符串.这样做有什么意义?如果您允许空字符串,为什么不允许字段为空?
Pis*_*3.0 36
NULL具有特殊行为:将任何值与NULL进行比较会返回a NULL,这是除了false或之外的其他内容0.这意味着"未知".
例如,拿这个表:
user_id | gender
------------------
1 | NULL
2 | 'M'
3 | 'F'
4 | 'F'
Run Code Online (Sandbox Code Playgroud)
SELECT * FROM mytable WHERE gender = 'M' 将按预期返回1行
SELECT * FROM mytable WHERE gender != 'M' 将返回2行,而不是3行.
SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL 将返回预期的3行.
编辑:对于某些应用程序,使用0(或者,上帝禁止,另一个"幻数")而NULL不是甚至不可取(单位或精确值在此示例中不相关):
Date | Temperature
--------------------------
2010-01-01 | 10
2010-01-02 | 4
2010-01-03 | 0
2010-01-04 | -22
2010-01-05 | -45
2010-01-06 | NULL
2010-01-07 | -34
Run Code Online (Sandbox Code Playgroud)
在这里,NULL1月6日意味着"价值未知" - 也许是因为温度很低,温度计探头停止响应.然而,它与1月3日完全不同,当时温度为00度.
此外,作为@Bill Karwin提到,NULL的表现特别是在聚合函数(COUNT,SUM,AVG等):计算AVG(Temperature)上述数据会给你-14.5,作为空行被忽略.
Bri*_*oth 11
null和""不是一回事,所以这里没有矛盾.
null /""的语义含义取决于个体,通常是一个"宗教"问题.对某些模式中的某些人来说,当然,它们可能是相同的,但它们并非必须如此.例如,""可能意味着"我明确要求用户输入,他们选择不输入任何内容",而null可能意味着"我从未要求输入".
| 归档时间: |
|
| 查看次数: |
13694 次 |
| 最近记录: |