MySQL“空”日期(0001-01-01)是不是有值

Posted

技术标签:

【中文标题】MySQL“空”日期(0001-01-01)是不是有值【英文标题】:Is there a value for MySQL "null" date (0001-01-01)MySQL“空”日期(0001-01-01)是否有值 【发布时间】:2021-04-23 18:36:51 【问题描述】:

在我的数据库中,有一个不可为空的日期列。当我没有提供日期时,该值显示为 0001-01-01。

但是,在客户端中,我需要知道该列何时为空,为此我使用了一个愚蠢的条件:

if (Record.Year == 1)

   ///the column is empty, show "N/A" for date

有没有比这更优雅的方式(DB列不能改)?

【问题讨论】:

使其可以为空。不要玩游戏,否则你会遇到问题。如果它“不能”被改变,那么无论你选择什么“神奇”的日期,你都会陷入一个痛苦的世界。您也许可以使用0000-00-00,但它很笨,看起来像一个数据错误。这就是你最终得到 2000 年历史的人和带有两千年后利息的发票的方式。 编写一个视图,将不可靠的数据映射到NULL(应该是这样)。这样你存储它是错误的,但检索它正确。 这是可空列的确切用例。修复数据库设计并将任何无意义的日期转换为正确的NULL 值。 我不明白你是否想存储空值。然后你可以决定如何处理它们。 【参考方案1】:

通过选择定义 NOT NULL 列,您告诉数据库,那里总是需要一个(可能是有效的)日期。如果这不符合您的业务逻辑,那么您只有两种可能:

匹配业务逻辑和数据库模型 (ALTER TABLE tablename MODIFY COLUMN ...) 忍受这场糟糕的比赛:这包括像“魔法值”这样的拐杖,而且很可能会导致更多的麻烦。

【讨论】:

以上是关于MySQL“空”日期(0001-01-01)是不是有值的主要内容,如果未能解决你的问题,请参考以下文章

日期时间“0001-01-01T00:00:00”的问题

如何防止 pandas.to_datetime() 函数将 0001-01-01 转换为 2001-01-01

Mysql时间类型为NULL,读出来是0001-01-01 08:05:43,想给前端显示为空字符或其他

Mysql时间类型为NULL,读出来是0001-01-01 08:05:43,想给前端显示为空字符或其他

Mysql时间类型为NULL,读出来是0001-01-01 08:05:43,想给前端显示为空字符或其他

时间日期函数整理