跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

mysql中的时间类型有哪些_mysql时间类型基础讲解

MySQL五种基础时间类型各具特点:DATE存日期(3字节,1000–9999年),DATETIME存完整时间且与时区无关(8字节,1000–9999年),TIMESTAMP存Unix时间戳、受时区影响且有2038年限制(4字节,1970–2038年),TIME存时间点或间隔(3字节,±838小时),YEAR存年份(1字节,1901–2155年)。 MySQL 中有五种基础时间类型:DATE、TIME、DATETIME、TIMESTAMP 和 YEAR。它们各自用途明确,存储方式和适用场景差异明显,选错类型可能影响精度、时区行为甚至未来扩容(比如 2038 年问题)。 DATE:只存日期,不带时间 格式为 YYYY-MM-DD ,取值范围是 1000-01-01 到 9999-12-31 ,占用 3 字节 。适合记录生日、入职日、合同生效日等无需具体时刻的场景。 插入 '2025-12-16' 或 '20251216' 都会被正确解析 不能存 '2025-02-30' 这类非法日期(除非开启
ALLOW_INVALID_DATES
,但不推荐) 零值是
0000-00-00
,但参与计算(如
DATE_ADD
)时结果不可靠 DATETIME 与 TIMESTAMP:都能存完整时间,但本质不同 DATETIME 格式为 YYYY-MM-DD HH:MM:SS ,范围大(1000–9999 年),占 8 字节, 与时区无关 ,存什么显示什么。 TIMESTAMP 格式相同,但底层存的是 Unix 时间戳(从 1970-01-01 UTC 起的秒数),占 4 字节, 自动受时区影响 ,范围窄(1970–2038),且默认支持自动初始化和更新(如
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)。 MySQL(Linux) MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。 下载 同一 TIMESTAMP 值在不同时区查询会显示不同时刻(例如 UTC+8 显示 10:00,UTC 下就是 02:00) DATETIME 不会自动更新,除非显式写触发器或应用层控制 若需长期存档(如金融历史数据)、跨时区一致性高,优先 DATETIME;若需轻量级自动记录创建/修改时间,且业务集中在单一或可控时区,TIMESTAMP 更省空间 TIME 和 YEAR:小而专的类型 TIME 存时间点或时间间隔,格式 HH:MM:SS ,范围从 -838:59:59 到 838:59:59 (注意可为负值,支持跨天计算),占 3 字节。常用于会议时段、工时统计、视频时长等。 YEAR 只存年份,占 1 字节,支持 4 位(1901–2155)或 2 位(00–69 → 2000–2069;70–99 → 1970–1999)。适合存毕业年份、车型年款等纯年维度数据。 插入
YEAR
列时写 '69' 会被存为 2069,写 70 则是 1970 TIME 支持类似 '-2 12:30:00' 表示“往前推 2 天 12 小时 30 分”,适合做时间差运算 怎么选?看三个关键点 不用死记硬背,抓住核心判断逻辑: 是否需要精确到秒级时间点?→ 否:用 DATE 或 YEAR;是:进入下一步 是否必须支持 2038 年以后的时间?→ 否:TIMESTAMP 可用;是:必须用 DATETIME 是否依赖自动更新或跨时区一致显示?→ 是自动更新/本地时区显示:TIMESTAMP;是跨时区统一解读:DATETIME

相关文章