在 TIMESTAMP 类型的 MySQL 列中使用零值

5 mysql sql timestamp

我对 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 使用二进制零作为神奇的数字?)

那么将语义分配给应用程序中的零个时间戳是否安全?或者这是一个可能会消失的未记录功能?

hei*_*erg 4

\n

表示时间值的日期和时间类型为 DATETIME、DATE、TIMESTAMP、TIME 和 YEAR。每个时间类型都有一个合法值范围,以及一个当您指定 MySQL 无法表示的非法值时可能使用的值。

\n
\n\n

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-types.html

\n