分享人:牛涛
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
格式的规定: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'
范围:'1970-01-01 00:00:00'到'2037-01-01 00:00:00'
1、什么是时间戳
时间戳指的就是Unix时间戳(Unix timestamp)。它也被称为Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。因此,严格来说,不管你处在地球上的哪个地方,任意时间点的时间戳都是相同的。这点有利于线上和客户端分布式应用统一追踪时间信息。
2、什么是时区?
时区是地球上的区域使用同一个时间定义。为了照顾到各地区的使用方便,又使其他地方的人容易将本地的时间换算到别的地方时间上去。有关国际会议决定将地球表面按经线从南到北,划分成24个时区,并且规定相邻区域的时间相差1小时。当人们跨过一个区域,就将自己的时钟校正1小时(向西减1小时,向东加1小时),跨过几个区域就加或减几小时。中国把首都北京所在的东8区的时间作为全国统一的时间,称为北京时间。
明明Date类型就该表示时间,为何要用bigint替代呢?
Date类型与时区有关。
timestamp与时区无关。
mysql 中的timestamp会自动更新,如果不需要这个功能,则使用bigint记录timestamp。
选择Mysql数据类型有哪些原则?
1.更小的通常是更好的(一般情况下,应该尽可能使用正确存储数据的最小数据类型。
(1) 因为更小的数据类型通常更快,因为它们占用更少的磁盘、内存和CPU缓存,并且处理时需要的CPU周期也更短。
(2) 要确保没有低估需要存储的值的范围,更小是相对与数据类型的最大值范围来讲的。
(3) 如果无法确定哪个数据类型是最好的,就选择你认为不会超过范围的最小类型。
2.简单就好(简单数据类型的操作通常需要更短的CPU周期。
(1)整型比字符串操作代价更低,因为字符串集和校对规则(排序规则)是的字符比较比整型比较更复杂。
(2)能够使用整型表示的字段,就不要用字符串。
3.尽量避免 NULL (空值)
(1)很多表都包含可为NULL的列,就算程序并不需要保存NULL也是如此,这是因为列的默认属性就是可为NULL。通常情况下最好指定列NOT NULL,除非真的需要存储NULL。
(2) 如果查询中包含可为NULL的列,对于Mysql来说是很难优化的,因为NULL的列使得索引,索引统计和值比较都更复杂。可为NULL的列会使用更多的存储空间,在Mysql里也需要特殊处理。
3.总结
(1)第一步需要确定合适的大类型(数字、字符串、时间等等)
(2)根据存储的长度和范围细化类型
(3)特殊情况考虑(eg: TIMESAMP的自动更新功能是否需要?)
1.龚师兄的小课堂。
2. http://billauer.co.il/blog/2009/03/mysql-datetime-epoch-unix-time/
3.http://www.joda.org/joda-time/quickstart.html
今天的分享就到这里啦,欢迎大家提问和探讨!