修改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
相关产品推荐
相关产品推荐

