全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 2026-05-15 6 分钟 ✍️ juanwangdev

MySQL 日期和时间类型

MySQL 提供多种日期时间类型,用于存储时间数据并支持时区处理和自动更新。

类型对照表

类型格式范围字节
DATEYYYY-MM-DD1000-01-01 ~ 9999-12-313
TIMEHH:MM:SS-838:59:59 ~ 838:59:593
DATETIMEYYYY-MM-DD HH:MM:SS1000 ~ 99998
TIMESTAMPYYYY-MM-DD HH:MM:SS1970 ~ 20384
YEARYYYY1901 ~ 21551

基本使用

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 实现自动更新时间
想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 MySQL 字符串类型
下一篇 → MySQL 枚举与集合类型
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码