在MySQL里处理时间数据时,我们常常需要拿到系统的当前时间或者对应的Unix时间戳。MySQL自带了一组时间函数,可以覆盖绝大多数业务场景,比如记录订单创建时间、统计某天的数据等。
常用获取当前时间的函数
MySQL提供了几个直接返回当前时间的函数,它们在格式和精度上略有不同:
- NOW():返回当前日期和时间,格式为 YYYY-MM-DD HH:MM:SS
- CURDATE():只返回当前日期,格式为 YYYY-MM-DD
- CURTIME():只返回当前时间,格式为 HH:MM:SS
- SYSDATE():返回执行该函数时的实时时间,与NOW在部分场景下略有差异
使用示例
-- 获取当前日期和时间 SELECT NOW(); -- 获取当前日期 SELECT CURDATE(); -- 获取当前时间 SELECT CURTIME();
如何获取当前时间戳
Unix时间戳是指从1970-01-01 00:00:00 UTC到现在的秒数。在MySQL中可以使用 UNIX_TIMESTAMP 函数获取。
获取当前时间戳
-- 不传参数时返回当前时间的Unix时间戳
SELECT UNIX_TIMESTAMP();
-- 传入时间字符串,返回对应时间戳
SELECT UNIX_TIMESTAMP('2023-08-01 12:00:00');
时间戳转回时间
如果已经有了时间戳,想转成可读时间,可以用 FROM_UNIXTIME 函数:
-- 将时间戳转为YYYY-MM-DD HH:MM:SS格式 SELECT FROM_UNIXTIME(1690872000);
在表中使用当前时间作为默认值
建表时经常希望时间字段自动填充当前值,可以结合 DEFAULT 和 CURRENT_TIMESTAMP 实现:
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
时区注意事项
MySQL的时间函数受系统时区或会话时区影响。可以通过如下语句查看和设置时区:
-- 查看当前时区 SELECT @@session.time_zone; -- 设置会话时区为东八区 SET time_zone = '+8:00';
如果应用服务器和数据库时区不一致,可能会导致时间字段显示偏差,建议在连接初始化时统一设置时区。
| 函数 | 返回类型 | 典型用途 |
|---|---|---|
| NOW() | DATETIME | 记录完整创建时间 |
| CURDATE() | DATE | 按日期统计 |
| UNIX_TIMESTAMP() | 整数 | 跨语言时间传递 |
在代码中使用类似 input() 的函数读取用户输入时,不要和数据库时间函数混淆,二者属于不同层面。
掌握这些MySQL时间和时间戳函数后,就能在各类业务里灵活记录与查询时间数据,减少手动拼接日期字符串带来的错误。