'expiration date' 列类型在某些情况下没有任何值应该是什么? (空白?空?0000-00-00?)

What should be an 'expiration date' column type when in some cases it doesn't have any value? (blank? null? 0000-00-00?)

我有一个 table 说明我在主菜单中使用的项目:

型号 | display_name | sub_menu |活跃

MYSQL:

CREATE TABLE `main_menu` (
  `model` varchar(255) NOT NULL COMMENT 'name of the model',
  `display_name` varchar(255) NOT NULL,
  `sub_menu` enum('Fruits','Vegtables','Grains','Breads','Snacks','Sweets') DEFAULT NULL,
  `active` tinyint(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

示例:

model   | display_name  | sub_menu  | active
---------------------------------------------
potato  | Potato        | Vegtables | 0
apple   | Apple         | Fruits    | 1
pumpkin | Pumpkin       | Vegtables | 1

exp_date 的类型应该是什么?显然 "Date".. 但如果某行没有 exp_date,那么什么是 "good practice"?插入 NULL?插入 0000-00-0

model   | display_name  | sub_menu  | active    | exp_date
--------------------------------------------------------------
potato  | Potato        | Vegtables | 0         | NULL
apple   | Apple         | Fruits    | 1         | NULL
pumpkin | Pumpkin       | Vegtables | 1         | 2019-03-01

使用 MySQL 5.7,可能会迁移到新的 8 版本。我只是想确保我做的正确。我记得(不确定从哪里)日期类型和日期值在一个问题中,并且有一种正确的方法来做到这一点。

我认为在不知道到期日期时使用 NULL 作为占位符没有任何问题。例如,您要查找所有尚未过期的记录。将 NULL 视为尚未过期,我们可以编写以下查询:

SELECT model, display_name, sub_menu, active, exp_date
FROM main_menu
WHERE exp_date > NOW() OR exp_date IS NULL;

如果您还不知道 exp_date,则使用 NULL;如果该行未过期,则使用 9999-12-31(日期的最大支持值)。