MariaDB 11.8对 FROM_UNIXTIME(0) 的返回值是NULL

后端开发 2026-07-09

我在试图找出为什么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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章