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

如何在MySQL中存储Unix毫秒数格式的日期及当前日期?

在MySQL中存储Unix毫秒数格式日期的方法

嘿,针对你的问题我分点来解答,顺便也聊聊和你当前用的datetime类型的差异:

一、如何用Unix毫秒数格式存储日期

Unix毫秒数是13位整数(比如你提到的1388880000000),首先得选对存储类型:

  • 优先用BIGINT类型,因为INT的最大值是2147483647,换算成毫秒数只能覆盖到2038年左右就会溢出,而BIGINT能支持到5138年,完全满足长期存储需求。

如果要把已有的datetime格式数据转成毫秒数存储,可以借助UNIX_TIMESTAMP()函数:

-- 将指定datetime字符串转为Unix毫秒数
SELECT UNIX_TIMESTAMP('2014-01-05 00:00:00') * 1000;
-- 输出结果就是1388880000000

插入数据时直接用这个表达式即可:

INSERT INTO your_table (ms_timestamp) VALUES (UNIX_TIMESTAMP('2014-01-05 00:00:00') * 1000);

二、如何存储当前日期的Unix毫秒数

要获取当前时间的Unix毫秒数,只需要把NOW()或CURRENT_TIMESTAMP传入UNIX_TIMESTAMP()后乘以1000:

-- 方法1:用NOW()获取当前时间并转毫秒数
INSERT INTO your_table (ms_timestamp) VALUES (UNIX_TIMESTAMP(NOW()) * 1000);

-- 方法2:用CURRENT_TIMESTAMP,效果和NOW()一致
INSERT INTO your_table (ms_timestamp) VALUES (UNIX_TIMESTAMP(CURRENT_TIMESTAMP) * 1000);

如果想让字段默认值就是当前时间的毫秒数,建表时可以这么设置:

CREATE TABLE your_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ms_created_at BIGINT DEFAULT (UNIX_TIMESTAMP(NOW()) * 1000)
);

额外补充:毫秒数与datetime的互相转换

之后如果需要把毫秒数转回datetime格式查看,用FROM_UNIXTIME()即可:

SELECT FROM_UNIXTIME(1388880000000 / 1000);
-- 输出结果为'2014-01-05 00:00:00'

小提醒:两种存储方式的取舍

  • 如果你更看重可读性、想直接在数据库里直观查看日期,datetime类型更合适;
  • 如果需要频繁做时间差计算、和前端交互(前端常用毫秒数处理时间),或者跨时区统一管理时间,用BIGINT存毫秒数会更便捷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:07:24