范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

面试官数据库日期类型字段,需要兼容不同数据库,应如何选择?

  作者:sp42a 来源:httpsp://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 的 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 维护  到什么时候,即便没有看到数据库设计文档,都能看明白并准确理解数据库中一条信息中,这个字段保存到确切信息
  使用这种方式的特点是牺牲一点效率,满足了查询结果的直观性和准确性要求。
  总结一下,字段类型的选择,还是根据场景的需要来选择,从功能、效率要求、持续开发的要求、维护的要求几个方面综合考虑。

渤海银行28亿成谜,又3亿被浦发偷质押,银行存款还安全吗?越是到了年底,很多涉及到违规违法的事情,可能就遮掩不过去了就会暴露出来了。在之前渤海银行将客户济民制药28亿存款强行划扣之事,还没有一个结果。客户指责渤海银行南京分行违规违法将存款你见过哪些最美的路人?美的路人实在是太多了,由于人们每天都会出街,路上人来人往的,一定会看到许多人,但是最美的路人这个话题,就要根据大部分人的审美观来回答了,因为每个人的观点都不会一样。下面就来分享一下法院判决后,被执行人没钱还,被判入狱后钱怎么要?没有这样的法律,欠钱是民事案件,不是刑事案件,不要乱给法律加帽子,也不会判刑,没有理由判刑,如果,欠钱人有钱不还可以查清楚判刑,如果欠钱人克没有钱还那么也不够判刑,这是不可能的事?美国加州等地接连发生打砸抢事件,有何原因?你怎么看?原因是想抢,就抢了。又看到了美丽的风景线。30多年前刚来美国在纽约送外卖,被抢过几次,都是在美国一年一度的节假期间,即11月底到年底期间。这段时间抢匪也要给自己和家人朋友送礼。节假如果华为在美国上市,市值大概是什么级别?这个假设永远不能成立,华为的股权结构注定它没办法上市,不管是美国或者国内A股都不可能!再说目前华为也没有上市的需求,所以说华为就连投行估值都没有数据,因为它的财务一直没有公开过,无中国女排31俄罗斯,美国女排重获新生挺进6强,美国网友感激中国队,你怎么看?在今天晚上刚刚结束的东京女排世锦赛,中国女排31战胜了俄罗斯女排,从而让美国女排在六场比赛加上重获新生挺近六强的比赛。本场比赛在前中国女排晋级六强的压力不大,已提前锁定经济状况而美你认为滴滴美国退市和联想有关系吗?有掌上明珠精心操作全力以赴干的事,教父哪有毫不知情脱得了干系之理?滴滴的老总是联想柳八爷的女儿,父女多少有瓜葛,从美国退市受现在联想的影响,多少有关联柳传志的联想在囯内受到许多网民如果伊朗的GPS被美国关闭,俄罗斯可以提供自己的导航定位给伊朗用吗?你怎么看?如果伊朗的gps被美国关了。俄罗斯可以开放格洛纳斯导航系统给伊朗使用吗?如果美国和伊朗之间爆发战争,俄罗斯虽然说不会直接进行军事介入(就是介入也得自欺欺人,指的这群毛子说他们是伊朗深圳现在行程码已经带列为中风险,什么情况下可降低为低风险?市县区域看,疫情没传染,中低降风险,个月病毒远,网络新闻办,工作最前线,健康证完全,外地控制好,病例也很少,明确诊断保。先来区分一下,何为中风险区域和低风险区域?大多数地方在疫情期平凡的世界故事结局后,接下去会发生什么?田晓霞落水后并没有牺牲,在下游三十里处被一对农家夫妇救起,申于头部受伤得了失忆症,忘记了以前一些事,后留学美国,毕业后在一家美国公司打工并嫁给了一个美国人,零八午年后担任公司大中华糖尿病脚麻木怎么调理?很高兴能回答你提的这个问题,很多糖尿病病人具有脚麻木的症状。我们首先要了解为什么糖尿病会出现脚麻木,这样我们就可以知道怎么预防和对症下药了。一,糖尿病导致脚麻木的机制脚麻木是糖尿病
以渔会友!2022年广东省第32届钓鱼锦标赛在惠州举办12月20日至21日,广东省第32届钓鱼锦标赛在4A级旅游景区惠东平海海滨温泉垂钓中心举行,来自全省各地的31支代表队近百人参加比赛。本次比赛参照中国钓鱼运动协会最新的淡水池钓竞赛个人养老金制度花钱买未来,国家为何要推行?一个人养老金制度的特点个人养老金制度是为了弥补基本养老金的不足,进一步提高退休后的生活水平,而为尚未退休的人员设计的一项养老保险制度安排,可以形象地称为花钱买未来。个人养老金制度实34天16板!股价暴涨170大牛股再次停牌核查点蓝字关注,不迷路累计触及4次异常波动,股票价格累计涨幅超170,供销社概念热股天鹅股份再次停牌核查。12月22日晚,天鹅股份公告称,鉴于公司股价近期波动较大,公司就股票交易波动情阳江五金刀剪加快融入双循环打造贸易新平台美丽阳江展会直播现场第21届中国(阳江)国际五金刀剪博览会开幕式暨阳江五金刀剪区域品牌会已于12月20日在阳江国际会展中心举行。本届刀博会以线上方式举办,创新办展方式,与阿里巴巴国市人大常委会召开列席代表座谈会12月22日下午,市六届人大常委会第七次会议列席代表座谈会召开,充分听取代表对泰州市人大常委工作报告(讨论稿)泰州市消防条例(草案),以及2023年市人大常委会工作安排的意见建议,去炫吧!乐派首站开唱,潘玮柏魔性演绎刘大娘我笑呵呵由芒果TV咪咕视频联合自制的音乐流派创演综艺去炫吧!乐派第二期将于12月24日12点正式上线。距离湖南站的路演开启不足36小时,音乐制作人张亚东与音乐人潘玮柏艾福杰尼万妮达ICE杨丈夫215斤,妻子196斤,千万身家求子10年,生娃为什么这么难?30岁的江雯慧是拥有8个工厂的女老板,她和丈夫创业多年,事业丰收的同时,体重也在猛增。体重加起来超过四百斤的夫妻,10年求子的背后,究竟有着怎样的原因呢?01hr在医院的大厅和过道小米总裁王翔退休,卢伟冰正式上位,雷军为何如此偏爱卢伟冰?最近,小米高层迎来人事的大变动,先来给大家科普一下小米的各位高管都是谁(光说几个知名度较高的)董事长兼CEO是雷军,副董事长是林斌,总裁是王翔,副总裁兼Redmi总经理是卢伟冰,M2022盘点丨织密安全网筑牢稳定器文丨中国劳动保障报记者叶海晨1实施养老保险全国统筹今年1月1日,企业职工基本养老保险全国统筹制度正式启动实施,基本统一了养老保险政策,做到全国一盘棋在全国范围内对地区间养老保险基金真以为俄军不敢使用核弹?泽连斯基赴美求援,普京宣布新消息12月21日,乌克兰总统泽连斯基赴美求援,并与美国总统拜登举行会晤。这是俄乌冲突爆发以来,泽连斯基首次公开离开乌克兰境内,以寻求美国在军事和经济上提供进一步援助。拜登在共同召开的新婴儿出生一个月后,有必要吃鱼肝油吗?鱼肝油是宝宝出生后就开始补充的一种产品,但是由于宝宝吃了鱼肝油后,身体上可能会缺少维生素d,就会影响到脑部,甚至还会引起佝偻病,所以在照顾宝宝的时候,父母要多观察孩子的身体状况,那