【问题标题】:In MySQL if a field has no data should it be empty or null, or other?在 MySQL 中,如果一个字段没有数据,它应该为空还是 null,还是其他?
【发布时间】:2012-09-22 12:20:55
【问题描述】:

我正在整理一个 MySQL 数据库,数据是一个客户列表。并非每个客户的所有字段都有数据。所以有些字段是空的。我们希望补全缺失的数据,但希望能够使用 SELECT 生成报告以列出那些缺失数据字段的客户记录。

在数据更新到这些字段之前,应该在这些字段中存储什么?它应该是NULL吗?空的?或者是其他东西?此外,在设置 MySQL TABLE 时,应将 NULL 列设置为什么以及将 DEFAULT 列设置为什么以最好地处理可能没有数据的情况?谢谢!

【问题讨论】:

  • 如果名称为空,则插入为 name = ' '

标签: mysql database-design field


【解决方案1】:

NULL 明确表示没有数据

所以如果你想确定你的意思是没有价值,请使用NULL。否则,所有其他默认值都被视为值。

空字符串'' 是一个值。 零0 也是一个值。

NULL 很特别,因为它意味着没有价值

这将使查询没有输入任何内容的行更容易。

您仍然应该对您的数据进行类型检查 - 这样人们就不会在身高或体重列中输入 -10。对我们来说,这很明显 - 没有任何东西可以有 0 高度,但对于数据库,该列有一个值 - 即使它不合逻辑,您也必须调整查询以过滤这些行。

【讨论】:

    【解决方案2】:

    您应该将其设置为NULL,因为它是代表UNKNOWNthe three-valued logic 中缺失值的标准值。

    【讨论】:

    • 但请记住,如果您习惯于二值逻辑,三值逻辑会令人困惑且不合逻辑。您会发现所有具有 X=3 的行的计数和具有 X!=3 的所有行的计数将加起来为所有行的计数。但不是。 X 为 NULL 的行不计算在内。
    【解决方案3】:

    根据我的经验,您会希望允许 null 用于此类事情。专门谈论字符串;有一天,空字符串可能是一个有效值。同样对于数字字段,如果您不允许空值,则必须求助于使用特殊值来表示“空”,例如 -9876.6789,这在编写代码时永远不会有趣。

    请记住,在编写查询并查找空值时,如果您执行field != null 之类的操作,您可能会得到误导性结果。你会想要使用field is not null

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-16
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 2019-10-06
      • 1970-01-01
      • 2011-04-07
      • 2012-07-23
      相关资源
      最近更新 更多