当前位置:网站首页>数据库中的日期时间类型
数据库中的日期时间类型
2022-04-23 12:46:00 【兴趣使然的小小】
前言:
大家好, 这里是小小! 今天, 实验室的一个学长发现我提交的一次代码有问题! 差点以为要被特殊关心, 好了说正事了!
看到数据库中时间日期类型, 很多人就会说了哈, 直接存字符串String类型呀!简单点~emm
最开始我也是这么想的, 然后被驳回了!

字符串存储日期
把日期和时间当做一个字符串进行存储,进而将日期和时间拆分成两个字段,一个字段记录日期(如yyyy-MM-dd),另外一个字段存储时间(如:HH:mm:ss)的形式。此种方式就不多说,除非极个别的场景,不建议使用。当使用此种方式进行处理日期,不仅性能有问题,比较、处理、取范围等都是麻烦事。之所以提出这种方式,也是提醒大家,如果你的数据库日期字段还在用字符串存储,需要慎重考虑一下了。
比如:
前端展示日期 我假设现在是yyyyMMdd hh:mm:ss
那前端现在改成了MMddyyyy 那该怎么办呢?
碰到时区问题该怎么办呢?
雀氏 如果就存一个字符串的话! 很难进行改变!
所以就会使用下面这个字符串:
DateTime类型
DateTime类型存储的值既有日期又有时间。我们直观看到的格式为:yyyy-MM-dd HH:mm:ss。它支持的时间范围是“1000-00-00 00:00:00”到“9999-12-31 23:59:59”。
但DateTime中并未存储时区信息,只存储了本地时间。也就是说:如果你将服务器的时区进行修改,数据库中记录的日期和时间并不会对应的变化。
那么,读出的数据与新存储的数据便是不一致的,也可以说是错误的。
通常,针对此种情况,如果涉及到跨时区问题,可考虑单独用一个字段来存储时区。
有时候还会使用:
Timestamp类型
Timestamp类型:也是既有日期又有时间的数据。存储和显示的格式跟Datetime一样。支持的时间范围是“1970-01-01 00:00:01”到“2038-01-19 03:14:07”。
Timestamp类型不仅存储了日期和时间,还存储了时区信息。如果以Timestamp类型存储,各数据库的实现会有所不相同,有的进行了内部时区自动转换。
如果应用服务器的时区和数据库服务器的时区不一致,你无法确定数据库驱动程序会不会自动帮你转换。
同时,时间范围是Timestamp硬伤。
| TIMESTAMP(14) | YYYYMMDDHHMMSS |
| TIMESTAMP(12) | YYMMDDHHMMSS |
| TIMESTAMP(10) | YYMMDDHHMM |
| TIMESTAMP(8) | YYYYMMDD |
| TIMESTAMP(6) | YYMMDD |
| TIMESTAMP(4) | YYMM |
| TIMESTAMP(2) | YY |
Unix timestamp
由于时区问题,地球上不同地方的人看到太阳升起的时间是不一样的。比如欧洲和北京时差有6-7个小时,当早上8点在北京看到太阳时,欧洲还处于凌晨1-2点。
除了上面所说的通过Timestamp类型存储包含时区的日期和时间外,还可以通过“绝对时间”来进行计算,单位为秒。
在计算机中,当前时间是指从一个基准时间(1970-1-1 00:00:00 +0:00)到现在的秒数,用一个整数表示。
有一个很神奇的东西, 就是2038年问题
为了调研数据库日期和时间的设置,也参考了阿里的开发手册,令人疑惑的是阿里使用的竟然是datetime类型。
的确如此,毕竟每个公司的业务范围不同,使用场景也不同。优秀的理念可以参考,但不能照搬。就好比本篇文章,介绍了不同类型的日期和时间存储,而根据你的业务场景选择最适合的那便是最好的。我这里最终决定用绝对时间戳来进行处理。
版权声明
本文为[兴趣使然的小小]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_51705526/article/details/124334304
边栏推荐
猜你喜欢

使用Source Insight查看编辑源代码

S2-062 远程命令执行漏洞复现(cve-2021-31805)

Kubernets Getting started tutoriel

Plato farm - a game of farm metauniverse with Plato as the goal

What are the forms of attack and tampering on the home page of the website

Everything can be expected in the future | one 2022 campus recruitment officially opened
![[unity note] basic lighting in l4unity](/img/38/d88245af2062ed67fb8e61327f3bb9.png)
[unity note] basic lighting in l4unity

Plato Farm-以柏拉图为目标的农场元宇宙游戏

Basic software testing Day2 - Case Execution

Can I take the CPDA data analyst certificate for 0 foundation
随机推荐
实现一个盒子在父盒子中水平垂直居中的几种“姿势”
解决disagrees about version of symbol device_create
消息队列概述
Plato farm - a game of farm metauniverse with Plato as the goal
Plato Farm-以柏拉图为目标的农场元宇宙游戏
Web17——EL与JSTL的使用
风尚云网学习-input属性总结
C#,二维贝塞尔拟合曲线(Bézier Curve)参数点的计算代码
Everything can be expected in the future | one 2022 campus recruitment officially opened
Resolve disagrees about version of symbol device_ create
【csnote】ER图
How do traditional enterprises cope with digital transformation? These books give you the answer
QT draw text
网络信息安全之零信任
98. Error s.e.errormvcautoconfiguration $staticview reported by freemaker framework: cannot render error page for request
uni-app 原生APP-云打包集成极光推送(JG-JPUSH)详细教程
Object.keys后key值数组乱序的问题
uni-app 原生APP-本地打包集成极光推送(JG-JPUSH)详细教程
一个平面设计师的异想世界|ONES 人物
How to prevent the website from being hacked and tampered with