最好在MySQL中使用零日期'0000-00-00 00:00:00'或NULL?

时间:2012-09-18 18:07:30

标签: mysql

在MySQL数据库上使用默认日期'0000-00-00 00:00:00'或NULL更好吗?

出于计算原因,我已经阅读了最好使用默认日期'0000-00-00 00:00:00'

>,而不是日期之前的日期。

如果时间不知道的话,还要准时存储00:00NULL

3 个答案:

答案 0 :(得分:2)

MySQL 5.7默认情况下不允许0000-00-00 00:00:00作为默认值,除非您设置sql_mode = ''。看来MySQL希望您使用NULL作为默认值。

答案 1 :(得分:0)

您应使用NULL,因为0000-00-00 00:00:00不是有效日期。如果您使用moment.jsCarbon之类的库来管理日期,则它们都知道如何处理NULL日期。

MySQL配置应始终设置为:

SET sql_mode = 'NO_ZERO_DATE';

除非您必须处理旧数据库。

根据MySQL Documentation的说法:

  

MySQL允许您将“零”值“ 0000-00-00”存储为“虚拟日期”。在某些情况下,这比使用NULL值更方便,并且使用的数据和索引空间更少。要禁止使用“ 0000-00-00”,请启用NO_ZERO_DATE模式。

如果您使用的是Windows:

  

通过Connector / ODBC使用的“零”日期或时间值会自动转换为NULL,因为ODBC无法处理此类值。

要考虑的另一点是:零日期的真正含义是什么?

  • '0000-00-00'<'2018-12-12'吗?
  • “ 0000-00-00”是“未知”吗?
  • “ 0000-00-00”是“ null”吗?

除非您的答案是第一个答案,而且您需要使用空日期进行比较,否则使用NULL值总是不会造成混淆。

答案 2 :(得分:-2)

默认值应为NOT NULL,以支持所有日期时间操作。 我也使用“0000-00-00 00:00:00”作为默认值。