大家好,我是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
链接:
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。