MySQL 时间字段类型选择

MySQL中有多种数据类型可以表示日期和时间。在设计表时,需要结合具体需求与项目背景来进行选择合适的时间数据类型,所以没有固定答案。

一、常见的时间字段

(1)VARCHAR:如果用 VARCHAR类型来存时间,优点在于显示直观。但是坑的地方也是挺多的。比如数据没有校验导致数据表示不明确,如果插入一条数据为 2023111 的数据,它可能是 2023 年 1 月 11 日,也可能是 2023 年 11 月 1 日,其次是字符串占用的空间更大,最后是字符串存储的日期字段,在比较时间的大小时候,效率比较低。

(2)TIMESTAMP:该类型占用 4 个字节空间,存储格式为 YYYY-MM-DD HH:MM:SS,能表示的时间范围为 1970-01-01 08:00:01 到 2038-01-19 11:14:07。也就表示 2038 年以后的时间,是无法用 TIMESTAMP 类型存储的。 但是它有一个优势,TIMESTAMP 类型是带有时区信息的。一旦你系统中的时区发生改变,例如你修改了时区 SET TIME_ZONE = "+8:00",项目中字段的值就会自动发生变更。这个特性用来做一些国际化大项目,如果遇到跨时区的情况时,需要特别注意。

(3)DATETIME:该类型占用 8 个字节空间,存储格式为 YYYY-MM-DD HH:MM:SS,存储的时间范围为 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59。相比于 DATETIME 类型,DATETIME 的存储时间范围更大。但是 DATETIME 存储的时间是绝对值,也就是不带有时区信息。如果你改变数据库的时区, 该项的值不会自动发生变更。

(4)DATE:该类型占用 4 个字节空间,存储格式为 YYYY-MM-DD,存储的时间范围为 1000-01-01 ~ 9999-12-31。适用于需要存储日期信息,比如生日、会议日期等。

(5)TIME:该类型占用 3 个字节空间,存储格式为 HH:MM:SS,存储的时间范围为 -838:59:59 ~ 838:59:59。适用于需要存储时间信息,比如每天开店时间、闹钟等。

(6)YEAR:该类型占用 1 个字节空间,存储格式为 YYYY,存储的时间范围为 1901 ~ 2155。适用于需要记录数据修改时间戳的场景,比如用户信息的最后更新时间、文章的最后编辑时间等。

(7)BIGINT:该类型占用 10(s) / 13(ms) 个字节空间,存储格式为一串时间戳,表示范围比  TIMESTAMP 大的多。优点是在前后端交互时,不容易发生日期格式转换的错误。缺点就是时间戳需要解析后,才可以被人识别。

二、TIMESTAMP 和 DATETIME 选择

TIMESTAMP 类型和 DATETIME 类型的存储格式都是为 YYYY-MM-DD HH:MM:SS

TIMESTAMP:

  • 记录数据的最后修改的时间,并且是最近的时间,比如更新时间、修改时间、日志时间、登录时间、注册时间等。
  • 用于实现数据版本控制和一致性检查。
  • 适用于需要追踪数据变更的场景,TIMESTAMP 字段的值会随着服务器时区的变化而变化。

DATETIME:

  • 记录具体的日期时间信息,不受时间范围限制。
  • 适用于需要存储特定或者固定时间点的场景,如文章发布时间、会议开始时间、服务器执行计划任务时间、锻炼计划时间等。
  • 如果不需要根据时区自动更新时间,可以使用 DATETIME 类型。

你可能感兴趣的:(mysql,数据库)