You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:MariaDB 11.8中FROM_UNIXTIME(0)返回NULL而非1970-01-01的原因

问题解答:MariaDB中FROM_UNIXTIME(0)返回NULL而非预期时间

这不是预期行为,核心原因是数据库时区设置导致Unix时间戳0对应的本地时间不存在。

具体分析

Unix时间戳0对应的是UTC时间1970-01-01 00:00:00,但FROM_UNIXTIME()会将其转换为数据库当前会话或全局的时区时间。如果你的数据库时区设置为某个在1970年1月1日00:00:00 UTC对应的本地时间不存在的时区(比如部分采用夏令时的时区,当时可能还未启用夏令时规则,或该时间点在本地时区中属于无效时间),函数就会返回NULL。

验证与解决步骤

  • 查看当前时区设置
    执行以下命令检查全局和会话时区:
    SELECT @@global.time_zone, @@session.time_zone;
    
  • 临时修改时区测试
    切换到UTC时区后重新测试:
    SET time_zone = '+00:00';
    SELECT FROM_UNIXTIME(0);
    
    此时应该返回1970-01-01 00:00:00,验证问题根源。
  • 永久修正时区
    如果使用Docker容器,可以在启动命令中添加时区参数,比如:
    docker run -d --name mariadb -e TZ=UTC mariadb:latest
    
    或者在MariaDB配置文件中设置default-time-zone = '+00:00'(对应容器内的/etc/mysql/my.cnf或相关配置文件)。

补充说明

你的sql_mode设置为NO_ENGINE_SUBSTITUTION和这个问题无关,该参数仅控制存储引擎替换的行为,不影响时间函数的处理逻辑。

内容的提问来源于stack exchange,提问作者Kasper Kuusisto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 23:03:08