我在BBC上阅读这篇文章。它讲述了一个叫珍妮弗·诺​​尔(Jenifer Null)的人的故事,以及她在使用在线机票预订,网上银行等在线数据库时如何面对日常问题。经常使用它。当我创建一个网站进行学习时,服务器端表单验证使用了正则表达式。据我所知,它很乐意接受“ Null”这个名字。我还没有尝试过。

有人可以解释这种情况何时发生的技术细节吗?表单验证只是执行string == NULL或其他操作吗?即使这样,我也不认为NULL is same as "NULL"

评论

该文章显然是由一名记者撰写的。空值是造成许多混乱的原因,您不会指望新闻工作者会如此困惑。

所有人:带有相关问题或文章链接的评论已移至下面的社区Wiki答案。请对该答案进行编辑(或建议进行修改),而不要在此页面上添加其他链接。

#1 楼

我已经看到数据库接口(例如框架库)以空列的字符串形式返回``null''。我相信有一个可以将其打开或关闭以进行调试的标志。该标志使开发人员可以轻松确定空字段是空值还是空值的结果。这是一个糟糕的设置,尤其是在生产环境中,这将解释本文中介绍的问题。

将'null'转换为null值的反向处理应为name字段生成应用程序错误。我希望这会很快解决。

评论


确实-这在无类型语言的框架中非常普遍,在该框架中,所有数据都转换为字符串。我从事此工作已经有几年了,但是例如,我认为ColdFusion的早期版本存在此问题。

–法律
16年4月21日在8:37

#2 楼

您的很大一部分困惑很可能源于新闻工作者的困惑。本文讨论使用整个应用程序系统而不仅仅是数据库的问题。完全合理,因为这是针对大量消费的写作,但是技术细节被作者掩盖或误解了。 DB的API。魔术值是一种反模式,很难将其淘汰。某些程序员很容易按照“有人输入'null'的方式写了一个条件?它们必须表示没有值,因为那是null的意思!”错误地尝试阻止SQL注入也可能导致上述对Null的虐待,或者夏威夷语姓氏包含一个单引号,这也是标准的SQL字符串定界符。如果业务逻辑或数据库约束期望有所不同,则将这些值转换为NULL或空字符串很容易创建错误。这自然会导致本文所述的令人沮丧的用户体验。

评论


我不知道奥布莱恩是夏威夷人。

– glglgl
16年4月21日在17:41

#3 楼

本文本身包含一个指向Stack Overflow问题的链接,该问题演示了该问题。它是在Flex应用程序中的代码:

currentChild.appendChild("Fred");


将包含单词Fred的元素附加到XML文档,但代码:

currentChild.appendChild("null");


将追加一个空元素,而不是包含文本“ null”的元素。

XML本身对文本值“ NULL”没有问题”,因此包含此类文字将没有问题。实际上,NULL在XML中根本没有特殊含义。

#4 楼

我认为没有一件事提到过:我们不只是在谈论SQL。

名称可能在数据库中开始/结束...但是要到达那里,通常涉及多个通道。数据库,Sql,php,html,javascript ... Java,C#,VB,Perl,Phython,Ruby,bash,批处理等,等等,等等...

流水线可能涉及将数据从一种格式转换为另一种格式。从Sql表,到json,到xml,到CSV等...

在这个复杂的链中的任何时候,它只会涉及到不良编程或模糊编程语言(Javascript)例如,null处理)...

所以不要将自己局限于数据库中的问题...因为它可以在“堆栈”中的任何位置。

#5 楼

社区Wiki回答了最初作为此热门问题的注释而留下的各种链接


Null的姓氏如何在许多数据库中引起问题? (程序员SE)
虚假性程序员相信Patrick McKenzie的名字
David Mikkelson(snopes.com)授予Bill的代码
在应用程序层中会引起此问题的编码示例。
妈妈的利用-又名小鲍比桌子(xkcd webcomic)


#6 楼

关系数据库必须容纳缺失或不相关的值。例如,客户列表可以包括手机号码或性别。公司要成为客户该怎么办-应该具有什么性别?

使用特殊的指标来表示价值的缺失。此特殊标志为NULL。因此,草率的编程可能会导致缺失值指示符NULL与詹妮弗·纳尔的姓氏混淆,也许将其姓氏解释为缺少数据而不是实际值。

有点像开设银行帐户,但不存任何钱。余额为零。这并不意味着您没有平衡。这意味着您有一个余额,其值为“ 0”。但是草率的编程可能会将零误解为“不存在”,并确定您根本没有帐户。

#7 楼

有很多写得不好的软件,甚至还有框架,它们对于名叫Null的人来说都表现得很奇怪。并删除该人是另一个可能的原因?