【发布时间】:2011-03-14 23:11:12
【问题描述】:
我对 MySQL 中 TIMESTAMP 类型的文档以及零值是否可以安全使用感到有些困惑。 manual says:
TIMESTAMP 数据类型的范围为 '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC。 ...
这意味着“0000-00-00 00:00:00”超出范围,因此无效。但是,据我所知,手册实际上并没有这么说。它也没有明确说 '0000-00-00 00:00:00' 是一个有效值。
实践表明 '0000-00-00 00:00:00' 有效,manual does say 表明:
CREATE TABLE t (ts TIMESTAMP DEFAULT 0);
是有效的 MySQL SQL。在实践中,它会导致插入“0000-00-00 00:00:00”默认值。
(所有这些都与 '1970-01-01 00:00:00' 超出范围这一奇怪的事实一致,IIRC 不是 uint32 unix 时间的情况。也许 MySQL 使用二进制零作为幻数?)
那么在应用程序中将语义分配给零个 TIMESTAMP 是否安全?或者这是一个可能会消失的未记录功能?
【问题讨论】: