在MySQL数据库中,使用默认日期“0000-00-00 00:00:00”还是NULL
更好呢?
我读到最好使用默认日期“0000-00-00 00:00:00”的原因是计算的需要。
即比一个日期小的日期要好。
对于时间,如果时间不确定,最好存储00:00
或NULL
。
在MySQL数据库中,使用默认日期“0000-00-00 00:00:00”还是NULL
更好呢?
我读到最好使用默认日期“0000-00-00 00:00:00”的原因是计算的需要。
即比一个日期小的日期要好。
对于时间,如果时间不确定,最好存储00:00
或NULL
。
NULL
,因为0000-00-00 00:00:00
不是一个有效的日期。如果你使用像moment.js或Carbon这样的库来管理日期,它们都知道如何处理NULL
日期。SET sql_mode = 'NO_ZERO_DATE';
除非你必须处理旧数据库,否则不建议使用“零日期”。
根据MySQL文档:
MySQL允许将“零”值'0000-00-00'存储为“虚拟日期”。这在某些情况下比使用NULL值更方便,并且使用的数据和索引空间更少。要禁止'0000-00-00',请启用NO_ZERO_DATE模式。
如果您使用Windows:
Connector/ODBC使用的“零”日期或时间值会自动转换为NULL,因为ODBC无法处理此类值。
另一个需要考虑的点是:零日期的真正含义是什么?
除非您的答案是第一个问题并且需要与null日期进行比较,否则始终使用NULL
值比较清晰易懂。
nil
,在尝试对它们进行日期比较时触发了NoMethodError: undefined method '>' for nil:NilClass
错误。 - Jon SchneiderMySQL 5.7 默认不允许使用 0000-00-00 00:00:00
作为默认值,除非您设置 sql_mode = ''
。看起来 MySQL 希望您使用 NULL
作为默认值。
为了支持所有日期时间操作,应该将默认值设置为 NOT NULL。 我也使用“0000-00-00 00:00:00”作为默认值。
SELECT * FROM t WHERE city=city
。 - Timo Huovinen
NULL
。0000-00-00 00:00:00
不是有效的日期(MySQL的JDBC驱动程序也会拒绝加载它)。对于时间部分,您必须使用NULL
,因为午夜零点是一个实际的时间,所以无法区分午夜和“无时间”。请注意,此处不能使用解释性文字,只需进行翻译即可。 - user330315NULL
。 - Kermit