Mysql 表字段中的NULL优于空字段?

Mysql 表字段中的NULL优于空字段?,mysql,database-design,Mysql,Database Design,我想知道字段中是否应该有空值,还是应该为空 什么是最好的 感谢有一个特定的参数,如果您使用它来表示您不知道该值应该是什么,或者您只是还没有该数据,那么在字段中使用一个显式的值来表示这些状态,那么您永远不应该允许数据为NULL。对于“空”字段也是如此。也就是说,我认为每个人都这样做了,或者已经这样做了,并且可能会再次这样做。NULL具有奇怪的比较属性,这就是为什么如果可以的话,最好避免它,并为缺少的数据状态提供显式值。NULL表示未设置任何数据,而空字符串可能是一些有效数据 因此,使用NULL有助

我想知道字段中是否应该有空值,还是应该为空

什么是最好的


感谢有一个特定的参数,如果您使用它来表示您不知道该值应该是什么,或者您只是还没有该数据,那么在字段中使用一个显式的值来表示这些状态,那么您永远不应该允许数据为NULL。对于“空”字段也是如此。也就是说,我认为每个人都这样做了,或者已经这样做了,并且可能会再次这样做。NULL具有奇怪的比较属性,这就是为什么如果可以的话,最好避免它,并为缺少的数据状态提供显式值。

NULL表示未设置任何数据,而空字符串可能是一些有效数据


因此,使用NULL有助于区分这两种情况。

从编程的角度来看,出于以下几个原因,我尝试不允许使用NULL值。其中之一是,代码通常对意外的空值有不良反应。如果查询筛选器更快地检查空值,我可能会考虑使用它们,但没有证据表明这是我所经历的。但我经历过许多函数,它们在进行某种比较时会失败,而不是在之前测试NULL。

每当三值逻辑可能再次攻击您时,请避免在基表中使用NULL。这说起来容易,但解释起来却冗长。三值逻辑有时可以成功地管理,但你的直觉很可能基于二值逻辑,并且可能会产生误导

如果避免在基表中使用空值,但使用外部联接创建视图或查询,请准备好处理空值。在where子句中从未使用过的字段中,以及在聚合中从未“错误”使用过的字段(如总和(字段))中的空值是可以的

空字段总是空的,但空并不总是意味着空。特别是,表单中的空字段或不存在字段可以转换为表中的非空值。自动编号字段就是一个例子

早在20世纪80年代,Oracle就犯了一个错误,对长度为零(空字符串)和NULL的VARCHAR字符串使用了相同的表示形式。四分之一个世纪以来,他们一直打算“马上”解决这个问题。不要屏住呼吸


不要使用null来传递有意义的消息。这几乎总是让你的同事们感到困惑,即使他们否认这一点。

空值是Database设计中必不可少的重要工具。如果您在插入记录时不知道该值,则null是完全合适的,也是最佳做法。将unknon转换为空字符串等已知值是愚蠢的。当您将字符串数据转换为日期或数字数据时,尤其如此。0与null不同,过去或将来的任意日期与null不同。因此,空字符串意味着没有值,null意味着我们不知道值是什么。这是一个重要的区别


处理空值并不难,任何有能力的程序员都应该能够做到。

你对“空”和“空”有什么区别?有些字段是可选的,例如,他们不必输入手机号码。我想知道在这些字段中使用NULL是更好,还是应该为空?这个问题在不同的设置中讨论相同的问题。它们背后的抽象概念是相同的,因此它可能提供了一些见解。因此,如果字段未设置,则将其保留为空会更好,因为它们是可选的?最好使用“无”在字段中,而不是空字符串或NULL,因为将来其他查看数据的人可能会对其含义有不同的解释。但设置NULL不是最佳做法吗。我想我已经在某个地方读到了它,恰巧与当前的问题有关(我将在这里粘贴评论):@Max Toro,一个例子。你早餐吃了什么?在提问之前,答案是未知的。无效的如果您回答并听到“nothing”的声音,则其数据表示为空字符串。在问题之前,答案是“值未知”。在问题(和答案)之后,值是emtpyAnthony Pegram 3月29日20:50我在一个方面同意Max的观点,NULL=未知,回答“nothing”或其他声音会导致响应“nothing”被记录,空字符串将根本没有响应,几乎与NULL一样模糊。您如何确定将来它是空的,或者数据是否已丢失?数据是某种东西,而不是什么都不是。我们都使用空字符串和NULL,但这并不意味着它是正确的答案,事实上,谁知道在使用它6个月后它意味着什么。我很想看看一个例子,其中“”比“无”或“无”或“不适用”要好。因为有些字段是可选的,例如,他们不必键入手机号码。在这些字段中使用NULL更好,或者应该为空?如果输入空数字或根本没有输入数字对您很重要(如果您能够区分它),请使用NULL。否则空值就可以了。