如何在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
相关产品推荐
相关产品推荐

