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 年问题)。
格式为 YYYY-MM-DD,取值范围是 1000-01-01 到 9999-12-31,占用 3 字节。适合记录生日、入职日、合同生效日等无需具体时刻的场景。
ALLOW_INVALID_DATES,但不推荐)0000-00-00,但参与计算(如 DATE_ADD)时结果不可靠
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)。
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不用死记硬背,抓住核心判断逻辑: