代码之家  ›  专栏  ›  技术社区  ›  Imnotapotato

“到期日期”列类型应该是什么?在某些情况下,它没有任何值?(空白?无效的?00?00?00??)

  •  -1
  • Imnotapotato  · 技术社区  · 6 年前

    我有一张表格,说明我在主菜单中使用的项目:

    型号显示名称子菜单激活

    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 ?显然是“日期”。但是,如果某一行没有有效期,那么什么是“良好实践”?插入 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
    

    使用MySQL5.7,可能会迁移到新的8版本。我只是想确保我做得很好。我记得(不确定从何处开始)某个问题中的日期类型和日期值,并且有一种正确的方法可以做到这一点。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Tim Biegeleisen    6 年前

    我看不出使用有什么问题 NULL 当到期日期未知时作为占位符。例如,您希望查找所有尚未过期的记录。治疗 无效的 由于尚未过期,我们可以编写以下查询:

    SELECT model, display_name, sub_menu, active, exp_date
    FROM main_menu
    WHERE exp_date > NOW() OR exp_date IS NULL;
    
        2
  •  1
  •   Lolan    6 年前

    使用 NULL 如果你还不知道出口日期和用途 9999-12-31 (日期的最大支持值)如果该行未过期。