我想为用户提供引入不完整日期(例如,仅2005年或1998年1月)但也可以包含年,月,日的完整日期的可能性。我可以使用数据库中的单个日期字段来完成此操作吗?
我尝试过UPDATE tableA SET mydate = '2001-00-00'
,它似乎可以正常工作(没有错误),但是我不确定这是否正确。在内部,我假设使用了时间戳,那么MySQL如何表示那些0?
最佳答案
documentation for the DATE_FORMAT()中有一条关于MySQL允许不完整日期的小注释:
如@wonk0所指出的,当未设置0000-00-00 00:00:00
时,MySQL会将无效日期设置为ALLOW_INVALID_DATES
。但是,即使未设置ALLOW_INVALID_DATES
,插入有效的年份(月份和日期均设置为零)似乎也不会触发此行为-至少在我的测试中没有(MySQL 5.1.54-1ubuntu4)。之前我已经使用过此功能,没有任何问题,但是到目前为止,我无法找到任何更详细的文档来完整描述此行为。
日期/时间比较似乎也可以按预期进行:例如,2011-01-00 > 2011-00-00
和2011-00-01 > 2011-00-00
可以达到预期的效果。
更新
参见this answer(由另一个Mike提出),以解决类似的问题。它指向《 MySQL 5权威指南》的摘录:
关于mysql - 将不完整的日期存储在MySQL日期字段中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6882788/