MySQL 可以使用许多类型来保存日期和时间值,例如 YEAR 和 DATE。MySQL 能存储的最小时间粒度为秒。
大部分时间类型都没有替代品,因此没有什么是最佳选择的问题。唯一的问题 MySQL 提供两种相似的日期类型:DATETIME 和 TIMESTAMP。对于很多应用程序,它们都能工作,但是在某些场景,需要做些适当选择。
DATETIME
这个类型能保存大范围的值,从 1001 年到 9999 年,精度为秒。它把日期和时间封装到格式为 YyYYMMDDHHMMSS 的整数中,与时区无关。使用 8 个字节的存储空间。
TIMESTAMP
TIMETAMP 类型保存了从 1970 年 1 月 1 日午夜(格林尼治标准时间)以来的秒数,它和 UNIX 时间戳相同。TIMESTAMP 只使用 4 个字节的存储空间,因此它的范围比 DATETIME 小得多﹔只能表示从 1970 年到 2038 年。TIMESTAMP 显示的值也依赖于时区。从空间效率来说,当然 TIMETAMP 比 DATETIME 更高。
如果需要存储比秒更小粒度的日期和时间值怎么办?MySQL 目前没有提供合适的数据类型,但是可以使用自己的存储格式:可以使用 BIGINT 类型存储微秒级别的时间截,或者使用 DOUBLE 存储秒之后的小数部分。