MySQL 毫秒时间戳

什么是时间戳
在计算机科学中,时间戳是指标示某个事件发生的特定时间的一个唯一的数值。它可以是一个表示日期和时间的整数,也可以是一个包含日期和时间的字符串。时间戳通常是从某个特定时间点开始计算,比如从 1970 年 1 月 1 日 00:00:00 UTC 时间开始计算,这个时间点被称为 Unix 时间戳(也被称为 Epoch 时间)。
MySQL 中的时间戳
在 MySQL 中,时间戳是指把一个日期和时间值转换为一个整数存储在数据库中。MySQL 提供了多种存储日期和时间的数据类型,包括 DATE、TIME、DATETIME 和 TIMESTAMP。
DATE数据类型用于存储日期值,精确到天,例如 ‘2022-01-01’。TIME数据类型用于存储时间值,精确到小时、分钟和秒,例如 ’12:34:56’。DATETIME数据类型用于存储日期和时间值,精确到秒,例如 ‘2022-01-01 12:34:56’。TIMESTAMP数据类型也用于存储日期和时间值,但有一些特殊性质,同时也是本文重点讨论的对象。
TIMESTAMP 数据类型
在 MySQL 中,TIMESTAMP 数据类型用于存储日期和时间值,它占用 4 个字节的空间,范围从 ‘1970-01-01 00:00:01’ 到 ‘2038-01-19 03:14:07’。
与 DATETIME 类型相比,TIMESTAMP 类型具有以下特点:
- 存储范围较小:由于
TIMESTAMP类型只占用 4 个字节的空间,因此它的存储范围相对有限。对于很久以后的时间,TIMESTAMP可能无法准确表示。 - 自动更新:在插入或更新一行数据时,如果该行含有
TIMESTAMP类型的列,MySQL 会自动将当前的日期和时间赋值给这个列。可以使用ON UPDATE CURRENT_TIMESTAMP属性指定TIMESTAMP列的自动更新行为。 - 时区转换:
TIMESTAMP类型的值在存储和检索时会自动进行时区转换。存储时会将当前连接的时区转换为 UTC 时区,检索时会将 UTC 时区转换为当前连接的时区。
毫秒时间戳与 TIMESTAMP 的关系
毫秒时间戳是指时间戳的值乘以 1000,通常用于记录更加精确的时间。在 MySQL 中,毫秒时间戳可以通过以下方式与 TIMESTAMP 数据类型进行转换:
- 将毫秒时间戳转换为
TIMESTAMP:SELECT FROM_UNIXTIME(timestamp / 1000) FROM my_table;示例代码的输入是一个名为
my_table的表,其中包含一个名为timestamp的列,存储了以毫秒为单位的时间戳。通过使用FROM_UNIXTIME函数将毫秒时间戳转换为TIMESTAMP类型的日期和时间值。 -
将
TIMESTAMP转换为毫秒时间戳:SELECT UNIX_TIMESTAMP(timestamp) * 1000 FROM my_table;示例代码的输入是一个名为
my_table的表,其中包含一个名为timestamp的列,存储了TIMESTAMP类型的日期和时间值。通过使用UNIX_TIMESTAMP函数将TIMESTAMP转换为以秒为单位的时间戳,然后乘以 1000 得到毫秒时间戳。
示例代码
以下是一个示例代码,演示了如何在 MySQL 中使用毫秒时间戳和 TIMESTAMP 数据类型:
-- 创建一个名为 my_table 的表
CREATE TABLE my_table (
id INT AUTO_INCREMENT PRIMARY KEY,
event_time TIMESTAMP(3),
event_time_ts BIGINT
);
-- 在 my_table 表中插入一条数据
INSERT INTO my_table (event_time, event_time_ts) VALUES ('2022-01-01 12:34:56.789', UNIX_TIMESTAMP('2022-01-01 12:34:56.789') * 1000);
-- 查询 my_table 表的数据
SELECT * FROM my_table;
代码中的第一个语句创建了一个名为 my_table 的表,该表包含三列:id、event_time 和 event_time_ts。id 是一个自增的整数主键,event_time 是一个 TIMESTAMP 类型的列,精确度为 3 毫秒,event_time_ts 是一个 BIGINT 类型的列,存储了以毫秒为单位的时间戳。
第二个语句插入了一条数据到 my_table 表中,其中 event_time 的值为 ‘2022-01-01 12:34:56.789’,event_time_ts 的值由 UNIX_TIMESTAMP 函数计算得到。
第三个语句查询了 my_table 表的数据,返回了插入的那条数据。
代码的运行结果如下:
id | event_time | event_time_ts
---------------------------------------
1 | 2022-01-01 12:34:56.789 | 1641035696789
可以看到,event_time 列存储了 TIMESTAMP 类型的日期和时间值,而 event_time_ts 列存储了对应的毫秒时间戳。
总结
本文介绍了 MySQL 中的时间戳概念及其在 TIMESTAMP 数据类型中的应用。通过示例代码,展示了如何使用 MySQL 将毫秒时间戳转换为 TIMESTAMP 类型的日期和时间值,以及如何将 TIMESTAMP 类型的值转换为毫秒时间戳。掌握这些知识,可以在数据库操作中更灵活地处理日期和时间数据。
极客笔记