我对 MySQL 中 TIMESTAMP 类型的文档以及零值是否可以安全使用感到有些困惑。该手册说:
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' 有效并且手册确实说:
CREATE TABLE t (ts TIMESTAMP DEFAULT 0);
Run Code Online (Sandbox Code Playgroud)
是有效的 MySQL SQL。在实践中,它会导致插入 '0000-00-00 00:00:00' 默认值。
(所有这些都与 '1970-01-01 00:00:00' 超出范围的奇怪事实一致,IIRC,对于 uint32 unix 时间不是这种情况。也许 MySQL 使用二进制零作为神奇的数字?)
那么将语义分配给应用程序中的零个时间戳是否安全?或者这是一个可能会消失的未记录功能?
\n\n\n表示时间值的日期和时间类型为 DATETIME、DATE、TIMESTAMP、TIME 和 YEAR。每个时间类型都有一个合法值范围,以及一个当您指定 MySQL 无法表示的非法值时可能使用的值。
\n
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-types.html
\n