SQL:空字串与NULL值
我知道这个话题有点争议,互联网上有很多各种各样的文章/观点。不幸的是,他们中的大多数人都假设该人不知道NULL和空字符串之间的区别是什么。因此,他们通过联接/聚集讲述令人惊讶的结果的故事,并且通常会做一些更高级的SQL课程。这样,他们绝对会遗漏所有要点,因此对我毫无用处。因此,希望这个问题和所有答案将使话题向前发展。 假设我有一个包含个人信息(姓名,出生等)的表,其中的一列是具有varchar类型的电子邮件地址。我们假设由于某些原因,某些人可能不想提供电子邮件地址。将此类数据(不带电子邮件)插入表时,有两个可用的选择:将单元格设置为NULL或将其设置为空字符串('')。让我们假设我知道选择一个解决方案而不是另一个解决方案的所有技术含义,并且可以为任何一种情况创建正确的SQL查询。问题是,即使两个值在技术层面上都不同,但在逻辑层面上却完全相同。看完NULL和”之后,我得出一个结论:我不知道那个人的电子邮件地址。也不管我怎么努力 我无法使用NULL或空字符串发送电子邮件,因此显然大多数SMTP服务器都同意我的逻辑。所以我倾向于在不知道该值的地方使用NULL,并认为空字符串是一件坏事。 经过与同事的激烈讨论,我提出了两个问题: 我是否假设使用空字符串作为未知值会导致数据库对事实“撒谎”,对吗?更准确地说:使用SQL关于什么是价值和什么不是价值的想法,我可能得出结论:我们拥有电子邮件地址,只是发现它不为空。但是后来,当尝试发送电子邮件时,我会得出一个矛盾的结论:不,我们没有电子邮件地址,@!#$数据库一定在撒谎! 是否有逻辑上的情况,其中空字符串”可以很好地承载重要信息(除了值和没有值),而通过其他任何方式(如附加列)进行存储都会很麻烦/效率低下。我见过很多帖子声称有时将空字符串与实数值和NULL一起使用是很好的,但是到目前为止,还没有看到一种合乎逻辑的方案(就SQL / DB设计而言)。 PS有些人会很想回答,这只是个人品味的问题。我不同意 对我来说,这是一个具有重大后果的设计决策。因此,我希望看到一些出于逻辑和/或技术原因而对此表示反对的答案。