如何在MySQL中查询当前时间的毫秒级时间戳?
获取MySQL当前时间的毫秒级时间戳
你说得对,UNIX_TIMESTAMP()和UNIX_TIMESTAMP(NOW())确实只能返回秒级的时间戳,这就是两者结果完全一致的原因——它们都只精确到1970纪元以来的整秒数。要得到类似JavaScript中Date.parse(new Date())的毫秒级时间戳,得利用MySQL对微秒级时间的支持,具体分两种情况处理:
方法一:MySQL 5.6.4及以上版本(推荐)
从MySQL 5.6.4开始,时间函数正式支持微秒精度。你可以通过以下两种方式计算毫秒级时间戳:
-- 方式1:直接转换带微秒的时间戳 SELECT FLOOR(UNIX_TIMESTAMP(NOW(6)) * 1000) AS now_in_mili; -- 方式2:拆分秒和微秒部分再组合 SELECT UNIX_TIMESTAMP() * 1000 + MICROSECOND(NOW()) DIV 1000 AS now_in_mili;
细节说明:
NOW(6):返回当前系统时间,精确到微秒(格式示例:2024-05-20 16:05:40.789123)UNIX_TIMESTAMP(NOW(6)):将带微秒的时间转换为带小数的秒级时间戳(比如1716206740.789123)- 乘以1000后得到毫秒级数值,用
FLOOR()取整就能得到和JavaScript一致的整数毫秒戳
如果你的MySQL是8.0及以上版本,也可以用CURRENT_TIMESTAMP(6)替代NOW(6),效果完全相同。
方法二:低版本MySQL(低于5.6.4)
如果你的MySQL版本不支持微秒精度,数据库层面没办法直接获取毫秒级时间戳。这种情况下建议在应用层处理:比如用JavaScript、Python等语言先获取当前时间的毫秒数,再传入数据库使用。
内容的提问来源于stack exchange,提问作者Yaniv Peretz




