使用默认值 NULL 好吗?

Posted

技术标签:

【中文标题】使用默认值 NULL 好吗?【英文标题】:Is it good to use a default of NULL? 【发布时间】:2011-07-05 07:00:41 【问题描述】:

我有一些列可能包含用户想要提供的数据。

示例 | 电子邮件 | 名字 | |

电子邮件 - 必需,因此列设置为 NOT NULL - 默认值:无

名字 - 不需要,因此列设置为 NULL - 默认值:NULL

姓氏 - 不需要,因此列设置为 NULL - 默认值:NULL

在创建/编辑列时在 phpmyadmin 中;它有一个选项说 Default: 下拉显示 None |定义 |空 |当前时间戳

因为 名字 |姓氏 是可选的,不需要我应该选择默认的 NULL 还是 NONE?

哪个最好,为什么?

我知道已经对此进行了很多讨论,但我找不到任何回答我的问题的;他们更多的是关于允许 NULL 或 NOT NULL,我的问题是关于默认值。

【问题讨论】:

【参考方案1】:

如果您打算为这些 NULL 列编制索引,那么在大表(超过 100 万行...)上,您确实会遇到性能问题。但是,使用空字符串或 NULL 作为默认值的字符串 ('null') 可能会提高您在这些情况下的查询性能。顺便说一句,我并不是说 NULL 是邪恶的,但这些是我们在电信业务中遇到的一些情况。

【讨论】:

感谢您的提醒。我不会用 NULL 值索引这些列,因此希望这对我来说不是问题。谢谢phplover【参考方案2】:

您应该将它们设置为 Default:Null,就好像用户没有为该字段提供任何信息一样,它们显然应该为 null。

【讨论】:

【参考方案3】:

使用 NULL,None 模式是插入 'None' 或一些 '' 字符串来表示那里什么都没有......

有关为什么要使用 NULL 而非字符串的更多信息,请查看此处:mysql, better to insert NULL or empty string?

【讨论】:

以上是关于使用默认值 NULL 好吗?的主要内容,如果未能解决你的问题,请参考以下文章

4.03 使用NULL代替默认值

angular 下拉框null默认值

SQL:将所有没有默认值的列的默认值设置为 NULL

属性默认值为 null 是不是与无默认值相同?

使用默认 FIREBIRD 将 null 插入非 null 列

将 NULL 插入具有默认值的 NOT NULL 列