ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL 保存日期,用哪种数据类型合适?字符串? date? datetime?timestamp?还是 int?

2022-04-18 18:00:06  阅读:375  来源: 互联网

标签:存储 01 int timestamp 数据类型 00 datetime date


一. 字符串

首先是不推荐字符串的, 原因如下:

1. 使用字符串存储日期,第一个显而易见的问题就是无法使用 MySQL 中提供的日期函数,这会为很多查询带来不便
2. 使用字符串存储日期的第二个问题就是占用空间较大, 例如存储一个标准"yyyy-MM-dd HH:mm:ss"格式的时间:

二. timestamp

先来看看timestamp的特点:

1. timestamp存储范围则介于 1970-01-01 00:00:01 UTC 到 2038-01-19 03:14:07 UTC 之间
2. timestamp自带时区属性, TIMESTAMP 类型字段的值会随着服务器时区的变化而变化,自动换算成相应的时间
3. 数据库中存储的形式为: yyyy-MM-dd HH:mm:ss
4. 对应Java类型: java.sql.Timestamp

故, 如果你的业务需要对应不同的国家时区,那么类型 TIMESTAMP 是一种不错的选择, 但它最大的弊病是他的存储范围只到2038年..

三. datetime

看看datetime的特点:

1. 数据库中存储的形式为:yyyy-MM-dd HH:mm:ss, 这个和timestamp存储形式一样
2. datetime存储范围介于 1000-01-01 00:00:00 到 9999-12-31 23:59:59 之间, 相比timestamp, 其可存储范围更大
3. datetime不具备时区属性, 时区问题也并非一定要在数据库中解决,也可以在前端或者服务端用代码处理下
4. 对应Java类型: java.util.Date 或者 jdk8的LocalDateTime

一般存储日期时间格式的字段, 建议使用datetime

四. date

看看date的特点:

1. 数据库中存储的形式为:yyyy-MM-dd
2. date存储范围介于 1000-01-01 到 9999-12-31 之间
3. 对应Java类型: java.util.Date(可通过@JsonFormat指定特定格式), 或者 jdk8的LocalDate

一般存储日期格式的字段(如: 生日), 建议使用date

五. int / bigint

有人存时间戳,存一个 int(11) 类型的数值(或者bigint(19)类型数值, 可精确到毫秒),用一个时间戳来表示时间

1. 其优点是: 当我们需要进行日期排序以及按照日期范围查询的时候,就变成了普通的数字比较了,那么效率肯定是杠杠滴
2. 但是缺点也显而易见: 可读性太差

 

好啦, 以上就是MySQL中常用的一些存储时间的类型, 个人还是比较建议使用 datetime 和 date 类型 !

这里有篇博文写的不错, 强烈推荐: https://mp.weixin.qq.com/s/V301YKTEmZy09QVRhKHLpg

标签:存储,01,int,timestamp,数据类型,00,datetime,date
来源: https://www.cnblogs.com/Baker-Street/p/16160905.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有