MySQL 日期和时间类型
MySQL 提供多种日期时间类型,用于存储时间数据并支持时区处理和自动更新。
类型对照表
| 类型 | 格式 | 范围 | 字节 |
|---|---|---|---|
| DATE | YYYY-MM-DD | 1000-01-01 ~ 9999-12-31 | 3 |
| TIME | HH:MM:SS | -838:59:59 ~ 838:59:59 | 3 |
| DATETIME | YYYY-MM-DD HH:MM:SS | 1000 ~ 9999 | 8 |
| TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970 ~ 2038 | 4 |
| YEAR | YYYY | 1901 ~ 2155 | 1 |
基本使用
SQL
-- 创建带时间字段的表
CREATE TABLE events (
id INT PRIMARY KEY,
event_date DATE,
event_time TIME,
created_at DATETIME
);
-- 插入数据
INSERT INTO events VALUES
(1, '2024-01-15', '14:30:00', '2024-01-15 14:30:00');
-- 使用函数获取当前时间
INSERT INTO events VALUES
(2, CURDATE(), CURTIME(), NOW());
TIMESTAMP 自动更新
SQL
-- TIMESTAMP 可自动更新为当前时间
CREATE TABLE logs (
id INT PRIMARY KEY,
content VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
INSERT INTO logs (id, content) VALUES (1, '初始内容');
-- created_at 和 updated_at 自动设为当前时间
UPDATE logs SET content = '更新内容' WHERE id = 1;
-- updated_at 自动更新
DATETIME vs TIMESTAMP
SQL
-- DATETIME: 8字节,不受时区影响
-- TIMESTAMP: 4字节,受时区影响,范围小
SET time_zone = '+08:00';
INSERT INTO test (ts, dt) VALUES (NOW(), NOW());
SET time_zone = '+00:00';
SELECT * FROM test; -- TIMESTAMP 显示会变化
TIMESTAMP 范围仅到2038年,超过此范围用 DATETIME。
要点总结
- DATE 只存日期,TIME 只存时间,DATETIME 存日期时间
- TIMESTAMP 自动时区转换,范围到2038年
- 常用
DEFAULT CURRENT_TIMESTAMP自动填充创建时间 ON UPDATE CURRENT_TIMESTAMP实现自动更新时间
📝 发现内容有误?点击此处直接编辑