有人可以解释这种情况何时发生的技术细节吗?表单验证只是执行
string == NULL
或其他操作吗?即使这样,我也不认为NULL is same as "NULL"
。#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”。但是草率的编程可能会将零误解为“不存在”,并确定您根本没有帐户。
评论
该文章显然是由一名记者撰写的。空值是造成许多混乱的原因,您不会指望新闻工作者会如此困惑。所有人:带有相关问题或文章链接的评论已移至下面的社区Wiki答案。请对该答案进行编辑(或建议进行修改),而不要在此页面上添加其他链接。