为什么要用long代替date类型?

大家好,我是IT修真院深圳分院第6期学员,一枚正直善良的JAVA程序员。

今天给大家分享一下,修真院官网JAVA任务中,task1部分的知识点——Date类型

1.背景介绍

mysql中的date类型。

格式的规定:Y表示年、M(前M)表示月、D表示日、H表示小时、M(后M)表示分钟、S表示秒。

下面是MySQL中可用的日期和时间列类型 

DATETIME——格式:'YYYY-MM-DD HH:MM:SS',范围:'1000-01-01 00:00:00'到'9999-12-31 23:59:59' 

DATE——格式:'YYYY-MM-DD',范围:'1000-01-01'到'9999-12-31' 

TIMESTAMP——格式:'YYYYMMDDHHMMSS'、'YYMMDDHHMMSS'、'YYYYMMDD'、'YYMMDD',范围:'1970-01-01 00:00:00'到'2037-01-01 00:00:00' 

TIME——格式:'HH:MM:SS' 

2.知识剖析

时间戳指的就是Unix时间戳(Unix timestamp)。它也被称为Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。因此,严格来说,不管你处在地球上的哪个地方,任意时间点的时间戳都是相同的。这点有利于线上和客户端分布式应用统一追踪时间信息。

3.常见问题

明明Date类型就该表示时间,为何要用bigint替代呢?

4.解决方案

Date类型与时区有关。

timestamp与时区无关。

mysql 中的timestamp会自动更新,如果不需要这个功能,则使用bigint记录timestamp。

5.编码实战

6.扩展思考

如何选择mysql的数据类型?

更小的通常是更好的(一般情况下,应该尽可能使用正确存储数据的最小数据类型。)

为什么呢?

(1) 因为更小的数据类型通常更快,因为它们占用更少的磁盘、内存和CPU缓存,并且处理时需要的CPU周期也更短。

(2) 要确保没有低估需要存储的值的范围,更小是相对与数据类型的最大值范围来讲的。

(3) 如果无法确定哪个数据类型是最好的,就选择你认为不会超过范围的最小类型。

简单就好(简单数据类型的操作通常需要更短的CPU周期。)

为什么呢?下面有几个例子说明一下原因。

(1) 整型比字符串操作代价更低,因为字符串集和校对规则(排序规则)是的字符比较比整型比较更复杂。(2) 存储日期和时间应该使用Mysql内建的类型(date,time,datatime)。(3) IP地址的存储应该用整型(int)。

尽量避免 NULL (空值)

为什么呢?

(1) 很多表都包含可为NULL的列,就算程序并不需要保存NULL也是如此,这是因为列的默认属性就是可为NULL。通常情况下最好指定列NOTNULL,除非真的需要存储NULL。

(2) 如果查询中包含可为NULL的列,对于Mysql来说是很难优化的,因为NULL的列使得索引,索引统计和值比较都更复杂。可为NULL的列会使用更多的存储空间,在Mysql里也需要特殊处理。

7.参考文献

1.龚师兄的小课堂。

2.http://billauer.co.il/blog/2009/03/mysql-datetime-epoch-unix-time/

3.http://www.joda.org/joda-time/quickstart.html

8.更多讨论

1.在不同时区计算时间戳如何获得当前地区的正确时间?

A:时间戳可以使用Date工具类,根据设置不同时区转为Date类型。默认为本机所在时区。

2.TIMESTAMP类型一定会自动更新吗?

A:DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,可以选择。

3.joda—time真的好用吗?

A:谁用谁知道。

感谢大家观看

PPT:PPT

视频:视频

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~

小礼物走一走,来关注我

赞赏支持

作者:blue

链接:

來源:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(为什么要用long代替date类型?)