默认日期'0000-00-00 00:00:00'或null

Mat*_*ers 11 mysql

更好的做法是在mysql数据库上使用默认日期'0000-00-00 00:00:00'或null

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

即.>小于约会的日期.

如果时间不明,也准时最好存储00:00或null

now*_*wox 6

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

\n\n

MySQL 配置应始终设置为:

\n\n
SET sql_mode = \'NO_ZERO_DATE\';\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

也就是说,根据MySQL 文档

\n\n
\n

MySQL 允许您将 \xe2\x80\x9czero\xe2\x80\x9d 值 \'0000-00-00\' 存储为 \xe2\x80\x9cdummy 日期。\xe2\x80\x9d 在某些情况下会出现这种情况比使用 NULL 值更方便,并且使用更少的数据和索引空间。要禁止“0000-00-00”,请启用 NO_ZERO_DATE 模式。

\n
\n\n

如果您使用的是 Windows:

\n\n
\n

\xe2\x80\x9cZero\xe2\x80\x9d 通过 Connector/ODBC 使用的日期或时间值会自动转换为 NULL,因为 ODBC 无法处理此类值。

\n
\n\n

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

\n\n
    \n
  • 是否“0000-00-00”<“2018-12-12”?
  • \n
  • “0000-00-00”是否意味着“未知”?
  • \n
  • “0000-00-00”是否意味着“null”?
  • \n
\n\n

除非您的答案是第一个并且您需要与空日期进行比较,否则使用NULL值总是不会那么混乱。

\n


bar*_*art 5

MySQL 5.7 默认将 disallowing0000-00-00 00:00:00作为默认值,除非您设置sql_mode = ''. 看起来 MySQL 希望你使用它NULL作为默认值。


chi*_*ito -4

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

  • NULL 表示缺少值/“未知”:https://en.wikipedia.org/wiki/Null_(SQL)。处理 null 意味着您的编码方式不像 MySQL 那样特殊。我还相信它会引入可理解性问题,例如,如果您查询日期列 &lt; 某个具体日期,那么 0000-00-00 也将被返回。如果 0000-00-00 表示“未知”,那么这些结果是不正确的,因为您如何确定“未知”确实小于(或 &gt; 或 =)具体日期?或者,如果 0000-00-00 *不*意味着“未知”(即 0000-00-00 &lt; 2015-01-01 有效),那么所有开发人员都必须同意/了解原因 (4认同)