MariaDB 11.8对 FROM_UNIXTIME(0) 的返回值是NULL
我在试图找出为什么FROM_UNIXTIME(0) 返回NULL,而不是1970-01-01 00:00:00。
我在MariaDB内运行以下内容:
SELECT FROM_UNIXTIME(0);
我的sql_mode是 NO_ENGINE_SUBSTITUTION。
我是在一个Docker容器中运行这段代码。
这是预期中的行为吗?
解决方案
也许并非人们预期的结果,但这是有文档记载/定义的行为。请参考 FROM_UNIXTIME() 的文档:
将自纪元(1970-01-01 00:00:00 UTC)起的秒数转换为一个
TIMESTAMP值,这与UNIX_TIMESTAMP()的行为相反。如果结果超出有效的TIMESTAMP值范围,将返回NULL。
然而,TIMESTAMP 的最低有效值是在 "1970-01-01 00:00:01 UTC"。请参阅 TIMESTAMP 类型的文档:
MariaDB将使用
TIMESTAMP数据类型表示的值存储为自 '1970-01-01 00:00:00'(UTC)起的秒数。这意味着TIMESTAMP数据类型可以容纳的值介于 '1970-01-01 00:00:01'(UTC)和 '2106-02-07 06:28:15 UTC' 之间。
由于它不能返回 '1970-01-01 00:00:00 UTC' 的 TIMESTAMP,因此返回 NULL。请参阅以下查询的结果:
SELECT VERSION(), FROM_UNIXTIME(0), FROM_UNIXTIME(1);
| VERSION() | FROM_UNIXTIME(0) | FROM_UNIXTIME(1) |
|---|---|---|
| 11.8.5-MariaDB | null | 1970-01-01 00:00:01 |
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。