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

修改MariaDB查询解决2038年问题,无需使用Unix时间

解决2038年时间陷阱:重构你的SQL查询(避开Unix时间戳)

嘿,这个问题正好戳中了一个经典的时间坑——32位Unix时间戳会在2038-01-19溢出,所以咱们得把依赖时间戳的逻辑换成数据库原生的日期时间运算,直接看修改后的方案:

MySQL 版本

UPDATE party 
SET left_time = (next_dose - dose)/power,
    takeoff = DATE_ADD(NOW(), INTERVAL left_time SECOND);

核心逻辑说明

  • 用NOW()替代unix_timestamp():它直接返回当前的DATETIME类型值,只要你的MySQL版本是5.6+(现在主流环境基本都是),就支持64位时间,完全不会碰到2038年的限制。
  • 用DATE_ADD()替代时间戳加法:这个函数直接对日期时间做算术操作,把当前时间加上计算出的left_time秒数,全程不需要转成整数时间戳,从根源上避开了溢出问题。

如果你的数据库是其他类型,也可以用对应的原生函数实现:

PostgreSQL 版本

UPDATE party 
SET left_time = (next_dose - dose)/power,
    takeoff = CURRENT_TIMESTAMP + (left_time || ' seconds')::INTERVAL;

SQL Server 版本

UPDATE party 
SET left_time = (next_dose - dose)/power,
    takeoff = DATEADD(SECOND, left_time, GETDATE());

额外提醒

要确保你的takeoff字段是日期时间类型(比如MySQL的DATETIME、PostgreSQL的TIMESTAMP、SQL Server的DATETIME2),而不是存储Unix时间戳的整数字段——这样才能彻底摆脱2038年问题的困扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:35:28