如果一个人的名字是 Null 那么它会如何破坏数据库?

Sou*_*nda 56 null database-agnostic

我正在BBC 上阅读这篇文章。它讲述了一个名叫 Jenifer Null 的人的故事,以及她在使用在线数据库(如预订机票、网上银行等)时如何面对日常问题。

我不精通数据库,也不经常使用它。我在做学习网站的时候,服务器端表单验证使用了正则表达式。据我所知,它很乐意接受“Null”这个名字。我还没有尝试过。

有人可以解释这种情况发生时的技术细节吗?表单验证只是在string == NULL做某事吗?即使这样我也不认为NULL is same as "NULL"

Bil*_*hor 43

我见过将“null”作为空列的字符串返回的数据库接口(例如框架库)。我相信有一个标志可以打开或关闭它以进行调试。此标志允许开发人员轻松确定空字段是空值还是空值的结果。这是一个糟糕的设置,尤其是在生产中,并且可以解释文章中解释的问题。

将“空”转换为空值的反向处理应该会为名称字段生成应用程序错误。我希望这会很快得到解决。


小智 25

你的很大一部分困惑很可能来自记者。文章讨论了使用整个应用程序系统的问题,而不仅仅是数据库。完全合理,因为这是一篇针对大众消费的文章,但技术细节被作者掩盖或误解了。

其中许多问题可能是由应用程序层引起的,而不是数据库的 API。魔法值是一种反模式,很难从这个行业中剔除。一些程序员很容易写出类似“有人输入了‘null’?他们一定意味着没有值,因为这就是 null 的含义!”这样的条件。防止 SQL 注入的错误尝试也可能是上述对 Null 或包含单引号的夏威夷姓氏的错误处理的原因,这也是标准的 SQL 字符串分隔符。

如果业务逻辑或数据库约束需要不同的东西,那么错误地将这些值转换为 NULL 或空字符串的应用程序很容易产生错误。这自然会导致文章中描述的令人沮丧的用户体验。

  • 我不知道奥布莱恩是夏威夷人。 (5认同)

小智 19

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

currentChild.appendChild("Fred");
Run Code Online (Sandbox Code Playgroud)

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

currentChild.appendChild("null");
Run Code Online (Sandbox Code Playgroud)

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

XML 本身对于文本值“NULL”没有问题,因此包含这样的文本没有问题。实际上,NULL在 XML 中根本没有什么特别的意义。


Wer*_*rCD 13

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

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

管道中的每个步骤都可能涉及将数据从一种格式转换为另一种格式。从 Sql 表,到 json,到 xml,到 CSV 等...

在这个复杂的链条中的任何一点,它都只需要一个糟糕的编程或一种模糊的编程语言(例如JavaScript空处理)......

所以不要把自己限制在数据库中的问题上......因为它可以在“堆栈”中的任何地方。


Pau*_*ite 8

社区 Wiki 对各种链接的回答最初作为对这个热门问题的评论