最新要闻
- 前沿热点:国产战机大片!电影《长空之王》定档:今年五一上映
- 杭州外来人口占3成 河南人数比肩本地土著 原来有历史原因
- 小米13系列大卖、汽车售价可达35万以上 小米高端成了:股价大涨
- 采埃孚新安全带:不用开空调 可提升电动车15%续航
- 焦点速读:3999元起 一加11首销51分钟打破所有二代骁龙8销量、销售额双记录
- 家用光纤宽带多少兆合适?家用光纤怎么接路由器?
- 招财猫的原型是什么猫?招财猫左手右手分别代表什么?
- 修正液的成分是什么?修正液的性质有哪些?
- 丁克家族是什么意思?丁克家庭的好处和坏处有哪些?
- 纪宝贝是什么电视剧的角色?纪宝贝是什么品种的狗?
- 天天快报!华硕ROG首款DP2.1接口显示器发布:无压缩4K 160Hz画质
- 世界热讯:车主激烈维权上演0元购!特斯拉成都门店否认:都是理性维权
- 重达2.4吨!美国40年前发射卫星今日坠落地球:或为朝鲜半岛
- 行业最低!一加Buds Pro 2首销899元:全链路延时仅54ms
- 【全球独家】腾讯发布未成年人春节寒假限玩通知:春节7天全开 工作日继续禁玩
- 全球滚动:特斯拉降价 国外车主怎么就不闹:原因发人深思
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
世界快看:面试官:数据库日期类型字段,需要兼容不同数据库,应该如何选择?
作者:sp42a来源:https://zhangxin.blog.csdn.net/article/details/124955363
当设计一个产品,其中很多地方要把日期类型保存到数据库中,如果产品有兼容不同数据库产品的需求,那么,应当怎样设计呢?
当然,首先想到的是,使用数据库的 Date 或 DateTime 类型,可是看看不同数据库这些类型间的区别吧,真让人望而止步。
【资料图】
MySQL 数据库:
它们分别是 date、datetime、time、timestamp 和 year。
- date :“yyyy-mm-dd”格式表示的日期值
- time :“hh:mm:ss”格式表示的时间值
- datetime:“yyyy-mm-dd hh:mm:ss”格式
- timestamp:“yyyymmddhhmmss”格式表示的时间戳值
- year:“yyyy”格式的年份值。
范围:
- date “1000-01-01” 到 “9999-12-31” 3字节
- time “-838:59:59” 到 “838:59:59” 3字节
- datetime “1000-01-01 00:00:00” 到 “9999-12-31 23:59:59” 8字节
- timestamp 19700101000000 到 2037 年的某个时刻 4字节
- year 1901 到 2155 1 字节
Oracle 数据库:
Date 类型的内部编码为12
长度:占用7个字节
数据存储的每一位到第七位分别为:世纪,年,月,日,时,分,秒
TIMESTAMP是支持小数秒和时区的日期/时间类型。对秒的精确度更高
TIMESTAMP WITH TIME ZONE 类型是 TIMESTAMP 的子类型,增加了时区支持,占用13字节的存储空间,最后两位用于保存时区信息
INTERVAL 用于表示一段时间或一个时间间隔的方法。在前面有多次提过。INTERVAL有两种类型.
- YEAR TO MONTH 能存储年或月指定的一个时间段.
- DATE TO SECOND 存储天,小时,分钟,秒指定的时间段.
sql server:
datetime 和 smalldatetime
- datetime数据类型所占用的存储空间为8个字节,其中前4个字节用于存储1900年1月1日以前或以后的天数,数值分正负,正数表示在此日期之后的日期,负数表示在此日期之前的日期;后4个字节用于存储从此日零时起所指定的时间经过的毫秒数。
- smalldatetime数据类型使用4个字节存储数据。其中前2个字节存储从基础日期1900年1月1日以来的天数,后两个字节存储此日零时起所指定的时间经过的分钟数。
- smalldatetime数据类型与datetime数据类型相似,但其日期时间范围较小,从1900年1月1日到2079年6月6日。此数据类型精度较低,只能精确到分钟,其分钟个位为根据秒数四舍五入的值,即以30秒为界四舍五入。
如果没有兼容多种数据库这个要求,我会毫不犹豫的使用数据库的 Date 类型。因为如果使用 Java 框架产生代码,对数据库中定义为 Date 类型的字段,甚至能在页面上产生出JS的时间选择框,的确能节省很多开发时间。而兼容不同数据库,就希望产品在由一种数据库,迁移到另外一种数据库时,尽可能小的代价,使用了 Date,看来就很困难了。
有一个疑问,不知道目前流行的ORM对这个处理得是不是好?因为工作不怎么涉及这方面,所以不大了解。
另外,Java 系列面试题和答案全部整理好了:
https://www.javastack.cn/mst/
在之前的设计开发中,因为有支持多种数据库这种需求,所以首先否定了日期时间这样的类型。
曾经使用过毫秒数(Java 的 System.currentTimeMillis())这种方式,但是选用这个方式,考虑的不是使用起来是否方便或者数据迁移,而是考虑到下面的原因:
Java 取到的毫秒数是对时间点的一种准确描述。定义如下:java.lang.System.currentTimeMillis(),它返回从 UTC 1970 年 1 月 1 日午夜开始经过的毫秒数。
我们可以看到,这个定义,保证了这个时间值能够被后续设计开发的人员正确和准确的理解,能够为所有的应用正确理解,能够在所有时区上正确反映为正常的时间形式。
当时的产品设计是有海外客户的,所以当时的设计,在数据库里保存的,应该是一个“准确的时间”。例如“20120926080000”实际上并没有严格的表示出时间,因为北京时间2012年9月26日8点和格林威治时间2012年9月26日8点显然是不一样的。
虽然我们都是在一个确切的时区里,例如中国都是使用东八区时间,但是需要考虑的是:
- 有些产品是可能有海外客户的
- 产品所运行的机器,时区的设置未必都是东八区。
在这种情况下,如果数据库里的时间不准确,会给程序运行带来问题。这种方式最大的缺点在于:
- 不方便对时间进行分组查询,比如按月统计、按季 统计
- DBA在维护时,不能直观的根据返回的行结果,看到简单明了的结果(看到的是毫秒数)
使用这种方式的特点是牺牲一点易用性和可理解性(不易于维护和理解),满足了查询结果的直观性和准确性要求,同时最大限度考虑运行效率。为了解决这个问题,我设计了一个辅助的措施,就是建立一个数据库函数来进行时间转换,把毫秒数的时间转为制定时区和格式的时间串,DBA 在维护时可以使用。测试了 Oracle 和 DB2 上,都可以这样。例如之前的查询的时候为:
SELECT username,user_addtime from userinfo
这个查询显示的是毫秒数,使用内置函数后写成:
SELECT username,date2str(user_addtime) from userinfo
这样返回的就是东八区、预先定义好格式的字符串了。
在之后的设计里,还使用过 YYYYMMDDHHmmSST 格式,其中的“T”指时区,加入时区,带来的影响有:
- 日期时间字段就不能在使用数值来存储了,字符串比数字存储和检索的效率都要低。
- 应用程序需要加上额外的处理
带来的好处是:
- 便于 DBA 维护
- 到什么时候,即便没有看到数据库设计文档,都能看明白并准确理解数据库中一条信息中,这个字段保存到确切信息
使用这种方式的特点是牺牲一点效率,满足了查询结果的直观性和准确性要求。
总结一下,字段类型的选择,还是根据场景的需要来选择,从功能、效率要求、持续开发的要求、维护的要求几个方面综合考虑。
近期热文推荐:
1.1,000+ 道 Java面试题及答案整理(2022最新版)
2.劲爆!Java 协程要来了。。。
3.Spring Boot 2.x 教程,太全了!
4.别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!
5.《Java开发手册(嵩山版)》最新发布,速速下载!
觉得不错,别忘了随手点赞+转发哦!
-
世界快看:面试官:数据库日期类型字段,需要兼容不同数据库,应该如何选择?
作者:sp42a来源:https: zhangxin blog csdn net article details 124955363当设计一个产品,...
来源: 世界快看:面试官:数据库日期类型字段,需要兼容不同数据库,应该如何选择?
今日最新!ThreadLocal源码解析及实战应用
交换机二层组播配置
管理工具造成的阻塞
前沿热点:国产战机大片!电影《长空之王》定档:今年五一上映
杭州外来人口占3成 河南人数比肩本地土著 原来有历史原因
小米13系列大卖、汽车售价可达35万以上 小米高端成了:股价大涨
采埃孚新安全带:不用开空调 可提升电动车15%续航
焦点速读:3999元起 一加11首销51分钟打破所有二代骁龙8销量、销售额双记录
家用光纤宽带多少兆合适?家用光纤怎么接路由器?
招财猫的原型是什么猫?招财猫左手右手分别代表什么?
修正液的成分是什么?修正液的性质有哪些?
丁克家族是什么意思?丁克家庭的好处和坏处有哪些?
纪宝贝是什么电视剧的角色?纪宝贝是什么品种的狗?
印度首家旗舰店来了?传苹果(AAPL.US)开始招聘零售店员工
年终盘点丨最受开发者欢迎的文章 TOP20
天天快报!华硕ROG首款DP2.1接口显示器发布:无压缩4K 160Hz画质
世界热讯:车主激烈维权上演0元购!特斯拉成都门店否认:都是理性维权
重达2.4吨!美国40年前发射卫星今日坠落地球:或为朝鲜半岛
行业最低!一加Buds Pro 2首销899元:全链路延时仅54ms
【全球独家】腾讯发布未成年人春节寒假限玩通知:春节7天全开 工作日继续禁玩
京音平台-一起玩转SCRM之电销系统
全球滚动:特斯拉降价 国外车主怎么就不闹:原因发人深思
环球观速讯丨电视“套娃式充会员”吃相难看 有人呼吁建立互相兼容的会员体系
天天要闻:电子后视镜正式获批!吉利路特斯首批上车:选装费1万6
北斗三号卫星系统总设计师:北斗核心指标已超GPS
精选!极端暖冬席卷欧洲 多国冬天“入夏”:天然气价格也遭暴跌
环球热门:深拷贝、浅拷贝
6.Servlet
环球短讯!春节档电影票房乐观预测可达85亿 吴京主演《流浪地球2》领跑
每日焦点!支付宝2023年“集五福”来了 网友:两块钱的大项目
时讯:网站关停!广汽讴歌成为历史 正式退出中国市场
2023中国航天开门红!我国再次成功发射一箭三星
卢伟冰:Redmi K60卖的非常好 是2.5K-4K价位首选!
天天即时看!未来要取代iPhone!苹果AR/VR头戴设备将春季发布:原型机已发放
A16研发失败后!iOS 17首曝光:苹果挤牙膏 没重大更新让人失望
天天讯息:电源买双倍功率就中计啦!大可不必
全球观热点:用4年依旧流畅!一加11今日首销:最低12G内存 3999元起
焦点速讯:暴雪网易复合几乎不可能:不会降低标准 正和新代理谈的火热
4week-3字符串和字符
世界时讯:DVWA靶场实战(五)——File Upload
ACWING 4366. 上课睡觉
【世界速看料】NVIDIA正在开发AI优化驱动:性能飙升30%
大几千元的空气消毒机是智商税吗?这操作多少有点愣
世界信息:神奇的雌雄同体:一不小心 “老婆”变成“老公”
[1] LeetCode 刷题笔记: 两数之和 [S]
expres实现登录与修改密码
《鹿鼎记》主演时隔24年重聚:小宝的四个老婆 她几乎没变
Codeforces 1671 F Permutation Counting 题解
关注:如何优雅地校验后端接口数据,不做前端背锅侠
《中国奇谭》封神:上线仅三集 追番量破200万
红旗正式发布新能源品牌:全新LOGO 新车3秒破百
【环球新视野】学习笔记——Maven的核心概念之仓库、坐标;maven的依赖管理;Maven中统一管理版本号;Maven的继承;Maven的聚合
jmap——Java内存分析工具
全球消息!AMD锐龙7040砍掉没用的PCIe 5.0!内存翻番256GB
全球快看点丨微软Xbox老大斯宾塞盛赞索尼:无障碍手柄是对PS生态很好的补充
环球观热点:1.Maven入门
每日快播:特斯拉的好日子 到头了
全球热资讯!马斯克承诺成空谈!推特被裁员工仅获1个月工资补偿
中国空间站能量粒子探测器成功安装:自主研发 将开启10年运行
世界快报:Steam特别好评!PC策略大作《文明6》打0.9折:入正绝佳时机
20万天价酒店被抢光!春节旅游十大热门目的地公布
当前讯息:美国能源部出手 阿贡开发出全新锂硫电池:能量密度可达特斯拉4680十倍
看热讯:网约车带走3岁孩子妈妈一路狂追 司机委屈:不敢从反光镜看女乘客
精选!C++ TinyWebserver 部署到Linux下,并运行(使用的是Vmware的虚拟机运行Ubuntu20.04)
世界新动态:JavaWeb概述
世界热讯:姚明12岁女儿最新身高曝光 网友:基因太强大!专家科普
乘客羽绒服炸开 绒毛飘满地铁车厢:这是为什么呢?
PC游戏掌机OneXPlayer 2发布:首发6099元起 流畅玩3A大作
Codeforces 1305 F Kuroni and the Punishment 题解 (随机算法)
Python深浅拷贝的理解
今日播报!基于卷积神经网络的人脸表情识别应用--AR川剧变脸(一)
Python中 re.compile 函数的使用
环球快看:学习笔记——在IDEA中创建Maven工程之HelloWord;Maven中常见的问题;Maven核心概念之POM、生命周期、插件和目标
天天动态:科学家都惊到的减肥药出现了!每周一针 有人减掉近一半体重
安全专家发现汽车漏洞 几乎全球所有汽车品牌均中招
仅175克重!夏普发布2K 120Hz头戴显示器
世界球精选!迪士尼玲娜贝儿头部被男子拍打 专家科普:内有钢架 可能造成脑震荡
最新消息:MySQL——锁
【全球新要闻】突破3200万!Steam同时在线再创新高
尹烨:俞敏洪是中国男人应该有的样子 你怎么看?
【天天速看料】女子吐槽小区新能源车主将充电枪提前锁车内 电价便宜再充
迈出国门!国产科幻《流浪地球2》确定将在新西兰等地上映
今日热门!特斯拉降价车主组团维权:维权没结果 又被收了7块停车费
每日视点!简单的24点小游戏
最资讯丨Java Netty框架自建DNS代理服务器教程
天天动态:著名配音艺术家苏秀去世 享年97岁:曾为上影动画《天书奇谭》配音
天天播报:苹果MFi认证 iPhone快充线23.9元:自动匹配iOS版本 不弹窗
手慢真的无了!杰士邦镇店之宝大促:原价169.9元券后19.9
天天快看点丨学习笔记——Maven的基本配置、Maven基本使用、将Maven整合到IDEA中
LeetCode 887. 鸡蛋掉落-题解分析
【当前热闻】男子新买百万奔驰被朋友借走撞烂:保险拒赔!最终结局意外
江西南昌县发生重大交通事故 造成17人死亡22人受伤
【环球新视野】特斯拉车价降至史上最低!才开30公里车主委屈:销售催提车
热讯:java多线程知识点总结
今日热门![Docker] 将容器打包成镜像、镜像分层机制详解
每日视点!成都车主“0元购”引热议 此前还有维权车主要平分特斯拉股权
环球速看:学习笔记——Maven
最资讯丨国产特斯拉大降价后车主维权 能拿到四项补偿?回应来了
电动救生圈亮相CES:时速15公里 续航6公里