咨询: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容器,可以在启动命令中添加时区参数,比如:
或者在MariaDB配置文件中设置docker run -d --name mariadb -e TZ=UTC mariadb:latestdefault-time-zone = '+00:00'(对应容器内的/etc/mysql/my.cnf或相关配置文件)。
补充说明
你的sql_mode设置为NO_ENGINE_SUBSTITUTION和这个问题无关,该参数仅控制存储引擎替换的行为,不影响时间函数的处理逻辑。
内容的提问来源于stack exchange,提问作者Kasper Kuusisto
相关产品推荐
相关产品推荐

