第 59.1 节:获取毫秒精度的当前时间

SELECT NOW(3);

即可实现。

第 59.2 节:获取类似 JavaScript 时间戳格式的当前时间

JavaScript 时间戳基于古老的 UNIX time_t 数据类型,表示自 1970-01-01 00:00:00 UTC 以来的毫秒数。

以下表达式以 JavaScript 时间戳整数形式获取当前时间(无论当前 time_zone 设置如何,都能正确计算):

ROUND(UNIX_TIMESTAMP(NOW(3)) * 1000.0, 0)

如果表中存储了 TIMESTAMP 值,可以使用 UNIX_TIMESTAMP() 函数将其作为整数 JavaScript 时间戳检索:

SELECT ROUND(UNIX_TIMESTAMP(column) * 1000.0, 0)

如果列包含 DATETIME 值并作为 JavaScript 时间戳检索,这些时间戳将根据存储时的时区偏移量进行偏移。

第 59.3 节:创建存储亚秒时间值的表

CREATE TABLE times (
    dt DATETIME(3),
    ts TIMESTAMP(3)
);

这将创建一个具有毫秒精度日期/时间字段的表。

插入数据:

INSERT INTO times VALUES (NOW(3), NOW(3));

插入具有毫秒精度的特定值:

INSERT INTO times VALUES ('2015-01-01 16:34:00.123', '2015-01-01 16:34:00.128');

注意:如果使用 NOW() 函数插入高精度时间值,必须使用 NOW(3) 而不是 NOW()。

第 59.4 节:将毫秒精度的日期/时间值转换为文本

%f 是 DATE_FORMAT() 函数的毫秒格式说明符。

SELECT DATE_FORMAT(dt, '%Y-%m-%d %H:%i:%s.%f') FROM times;

显示类似 2016-11-19 09:52:53.248000 的值,包含微秒。由于我们使用了 NOW(3),微秒的最后三位数字为 0。

第 59.5 节:将 JavaScript 时间戳存储到 TIMESTAMP 列

如果你有一个 JavaScript 时间戳值,例如 1478960868932,可以像这样将其转换为 MySQL 带小数的日期时间值:

FROM_UNIXTIME(1478960868932 * 0.001)

使用该表达式将 JavaScript 时间戳存储到 MySQL 表中:

INSERT INTO table (col) VALUES (FROM_UNIXTIME(1478960868932 * 0.001));