尽管@jsnplank是正确的,时间戳的处理方式不同,但您应该考虑对这两个特定列使用datetime数据类型,但是,他无法解释错误消息.
错误消息很可能是mysql在没有提供默认值和sql模式设置时如何处理时间戳字段的结果.
>您将两个timestamp列定义为非null,而不设置任何特定的默认值.这意味着第一个时间戳列的默认值将是current_timestamp(),并且每当记录更改时也将更新为current_timestamp().这就是为什么第一个时间戳字段不会生成错误消息,无论哪个是第一个.
但是,如果您没有明确定义默认值,则第二个非空时间戳列的默认值将为’0000-00-00 00:00:00′.
见this blog post for more details.
>或许no_zero_date sql模式也会在您的服务器上显式启用或作为严格的sql模式的一部分启用.如果您希望将’0000-00-00 00:00:00’设置为默认值,或者希望将此值插入任何日期字段,则此sql模式会生成错误.
因此,您可以在表中使用timestamp数据类型,但是将第二个数据类型设置为可空或提供0或任何有效日期(例如epoch)作为显式默认值.
由于您使用这些字段标记开始日期和结束日期,因此将日期时间而不是时间戳作为数据类型可能是一个好主意.