记录总结,MySQL中的时间字段的几种数据类型比较
admin
2023-04-15 19:02:00
0

序言

以前脑海里就一念头总以为啥时间都用int存储,最近在项目开发时,频繁见到datetime类型,对于MySQL数据库中的有关时间的字段该选用何种类型,引发了一些争论。所以做了一些简单的研究,看了一些blog和官方文档。最后做出一个自己的总结。

类型比较

int

INT类型一般用于存储Unix时间戳。使用一个简单的 INT 列保存 Unix 时间是最普通的方法。使用 INT,你可以确保你要保存的数字可以快速、可靠地插入到表中。

  • 占用4个字节
  • 建立索引之后,查询速度快
  • 条件范围搜索可以使用使用between
  • 不能使用MySQL提供的时间函数

如果只是存储 Unix 时间戳(并且在它的合法日期范围内),而且不打算在它上面使用任何基于日期的查询,我觉得使用 INT 是可以的。它执行简单数值比较查询时非常快,因为只是在处理简单的数字。

结论:适合需要进行大量时间范围查询的数据表,不支持在此字段上进行MySQL时间函数的运算,比如from_unixtime

TIMESTAMP和DATETIME

Datetime 和 Timestamp 都保存日期和时间信息,同时,使用人类可读的日期形式,如 “2018-01-01”。

TIMESTAMP: A four-byte integer representing seconds UTC since the epoch (‘1970-01-01 00:00:00’ UTC)

TIMESTAMP:一个四字节的整数,从1970-01-01 00:00:00开始算起。

Timestamp 和 Datetime 的核心不同点主要在于 MySQL在内部如何表示这些信息:两种都以二进制而非字符串形式存储,但在表示日期/时间部分时 Timestamp (4 字节) 比 Datetime (5字节,从MySQL 5.6.4版本起,之前为8个字节) 少使用 1 字节。当保存毫秒部分时两种都使用额外的空间 (1到3 字节)。

非分数部分的DATETIME编码(5.6.4版本之后):

1 bit sign (1= non-negative, 0= negative)
17 bits year*13+month (year 0-9999, month 0-12)
5 bits day (0-31)
5 bits hour (0-23)
6 bits minute (0-59)
6 bits second (0-59)


40 bits = 5 bytes

Timestamp 节省的 1 字节是有代价的:你只能存储从 ‘1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’ 之间的时间。而 Datetime 允许你存储从 ‘1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’ 之间的任何时间。

另一个重要的差别是MySQL使用服务器的时区转换Timestamp值到它的 UTC 等价值再保存。当获取值是它会再次进行时区转换,所以你得回了你“原始的”日期/时间值。Datetime 列不会被数据库改变。无论时区怎样配置,每次都会保存和获取到同样的值。

在5.6版本之后,datetime开始可以使用current time作为默认值,所以不再有timestamp比datetime更适合作为需要随插入和更新来变更时间的类型的说法。

结论:Datetime 是大多数场景下的最佳选择,理由是

  • 无需任何转换即是人类可读的。
  • 不会因为时区变换产生问题。
  • 只比它的对手们多用 1 字节
  • 支持更大的日期范围(从 1000 年到 9999 年)

总结

没有完美的数据类型,只要最合适的数据类型。这么多类型同时存在一定是有其道理的,了解清楚了不同类型的差异,就能选择最合适的类型。

参考:

  1. 解析MySQL中存储时间日期类型的选择问题
  2. Date and Time Data Type Representation
  3. MySQL中你应该使用什么数据类型表示时间?
  4. MySQL中的时间字段的几种数据类型比较

相关内容

热门资讯

玩家分享攻略“经典联盟是不是有... 有 亲,根据资深记者爆料经典联盟是可以开挂的,确实有挂(咨询软件无需打开...
重磅消息“新版荣耀牛牛怎么装挂... 您好:新版荣耀牛牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款...
【第一消息】“开心游戏怎么开挂... 网上科普关于“开心游戏有没有挂”话题很是火热,小编也是针对开心游戏作*弊开挂的方法以及开挂对应的知识...
特朗普与泽连斯基会晤,回应年内... 美国东部时间28日下午,美国总统特朗普在佛罗里达州海湖庄园与乌克兰总统泽连斯基就拟议中的俄乌“和平计...
今日重大通报“天天微友炸/金/... 家人们!今天小编来为大家解答天天微友炸/金/花透视挂怎么安装这个问题咨询软件客服徽4282891的挂...
俄罗斯团体评年度热词 “拉布布... 新华社莫斯科12月28日电(记者栾海)临近岁末,俄罗斯多家团体评选出本国2025年度热词,“胜利”、...
我来教教您“白金岛歪胡子开挂器... 有 亲,根据资深记者爆料白金岛歪胡子是可以开挂的,确实有挂(咨询软件无需...
今日重磅消息“决战恩施麻将真的... 您好:决战恩施麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这款...
【今日要闻】“马鞍山麻将真的有... 您好:马鞍山麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款游...
玩家攻略科普“新好游牛牛是不是... 玩家攻略科普“新好游牛牛是不是有挂?”(其实是有挂)您好,新好游牛牛这个游戏其实有挂的,确实是有挂的...