datetime、timestamp、varchar2之争

时间的字段类型使用datetime、timestamp、varchar2中的哪个?一直都存在争议,似乎每一个都有优缺点。我认为一个企业及的应用,使用datetime类型是最为合适的选择,日期类型使用date格式!
因为:
一般日期或时间字段都需要用于检索、排序,或者需要进行计算,例如计算时间是否过期,是否生效,多久后过期等等,使用date、datetime可以直接映射成想要的java对象,无需将字符串转换成对象,同时不存在2038年问题,对应企业及的应用规范使用datetime将可以减少不必要的麻烦!

以下是我认为的优缺点,有不同意见的欢迎留言讨论:

datetime

优点:

  1. 占用空间较小;
  2. 计算方便;
  3. 索引效率高;

缺点:

  1. 国际站的时区需要单独处理;
  2. 显示格式需要转换为对应的字符串格式;

timestamp

优点:

  1. 占用空间最小;
  2. 计算最方便,可以直接使用时间戳进行计算;
  3. 索引效率高;
  4. 对国际站的时区问题友好;

缺点:

  1. 日期有效范围过小,存在2038年问题,作为一个要求数据保留10年以上的管理系统,使用timestamp将存在很大问题;
  2. 显示格式需要转换为对应的字符串格式;

varchar2

优点:

  1. 存储即展示的格式,避免格式化
  2. 用于存储年,年月这种格式

缺点:

  1. 存储空间最大,yy-MM-dd HH:mm:ss格式需要19位,如果需要毫秒更长;
  2. 如果需要转换成其他的显示格式,得转换两次;
  3. 如果需要计算的场景,需要先将字符串转换为日期类型再操作,例如上个月的日期;
  4. 影响检索效率,例如使用大于小于比较似乎会影响性能,而且不同数据库的处理机制似乎会存在差异,重点是直接比较似乎不太合理;
  5. 使用between and 不同的数据库语法可能存在差异,需要使用函数将字符串转换为日期格式;
  6. 数据不会校验合法性,例如闰年2月;

datetime、timestamp、varchar2之争相关推荐

  1. mysql datetime timestamp 索引_MYSQL中时间类型底层存储,DATETIME ,TIMESTAMP,INT 如何选择?...

    在优化索引时,思考了一个问题,DATE, DATETIME, TIMESTAMP,还有INT存储的时间,在索引中哪个效率更高一些? 索引存储的,如果单纯的测试,而不去了解底层存储的方式和类型就不能断言 ...

  2. mysql 时间类型 datetime,timestamp

    2019独角兽企业重金招聘Python工程师标准>>> CURRENT_TIMESTAMP 的 timestamp 意思是 根据 mysql 的当前时间,使用mysql 的当前时间. ...

  3. mysql datetime转换为date_MySQL date,datetime,timestamp区别及相互转换

    date 是精确到日,datetime精确到秒.timestamp 时间戳 date: 日期  如:2019-10-26 不带时分秒 datetime: 日期时间 如:2019-10-26 10:53 ...

  4. datetime timestamp的区别

    我们看看这几个数据库中(mysql.oracle和sqlserver)如何表示时间 mysql数据库:它们分别是 date.datetime.time.timestamp和year.date :&qu ...

  5. mysql publishedtime_MySQL数据库中的Date,DateTime,TimeStamp和Time类型

    DATETIME类型用在你需要同时包含日期和时间信息的值时.MySQL检索并且以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,支持的范围是'1000-01-01 00:00:0 ...

  6. mysql中时间类型datetime,timestamp与int的区别

    在mysql中存储时间,我们可以用datetime 格式,timestamp格式,也可以用int格式.那么我们设计的时候该如何考虑呢? 首先,我觉得应该明白这几个格式究竟是如何的,然后看看他们的区别, ...

  7. Java与数据库中的datetime Timestamp以及String之间的转换

    这是今天做数据库的时候碰到的问题,先大概说一下问题,首先大家知道数据库中对于时间的存储类型有好几种,比如timestamp,datetime,date, 那么我们的程序不可避免会出现对于时间的写入和读 ...

  8. python timestamp和datetime之间的转换_python – 在datetime,Timestamp和datetime64之间转换

    要将numpy.datetime64转换为datetime对象,它表示UTC中的时间在numpy-1.8上: >>> from datetime import datetime &g ...

  9. MySQL数据库时间类型datetime、bigint、timestamp的查询效率比较

    以下文章来源方志朋的博客,回复"666"获面试宝典 来源:https://juejin.im/post/6844903701094596615 数据库中可以用datetime.bi ...

最新文章

  1. Android软键盘遮挡的四种解决方案
  2. UVa11464 - Even Parity(递推法)
  3. 剑指offer 算法 (时间效率)
  4. 中plot 函数中字体大小_Excel中的VLOOKUP函数
  5. Python单元测试之pytest
  6. 北斗导航 | GNSS技术在自动驾驶中的作用
  7. 并发编程之Synchronized
  8. flex如何做响应式设计_响应式设计-您做错了!
  9. heap 的一些用法
  10. Mybatis之typeAlias配置的3种方法
  11. 是不是每个人的成长路上都会有迷茫的阶段?
  12. T-SQL多个小计+合计,分类汇总
  13. 微信支付功能测试用例
  14. 在Windows Server 2012中搭建WEB服务器,附ASP配置方法
  15. mac 版本charles安装报错-Charles cannot configure your proxy settings while it is on a read-only volume.
  16. JS组合函数(Composition):原来如此!
  17. 【Linux】修改文件或文件夹权限的命令
  18. 查看BMP格式图片的十六进制代码
  19. Win10 收件箱添加QQ邮箱(2019年5月19日)
  20. 微信小程序:wx.makePhoneCall

热门文章

  1. 分配教室(C/C++)
  2. 星战前夜无烬星河服务器维护中,星战前夜无烬星河异常空间攻略 刷异常技巧分享...
  3. 重写(override)equals方法的必要性探究
  4. 如何使用excel批量生成sql语句
  5. c# winform 扁平化窗口_C# 如何在winform窗体自定义一个扁平化控件(转)
  6. EN 1154建筑五金件受控关门装置—CE认证
  7. 汽车之家配置参数抓取
  8. jacobian 矩阵意义_对雅可比矩阵的理解
  9. Android开机流程
  10. Say Hello To Everyone!