mysql 中你应该使用什么数据类型表示时间

mysql 中你应该使用什么数据类型表示时间

ID:11651007

大小:294.04 KB

页数:20页

时间:2018-07-13

mysql 中你应该使用什么数据类型表示时间_第1页
mysql 中你应该使用什么数据类型表示时间_第2页
mysql 中你应该使用什么数据类型表示时间_第3页
mysql 中你应该使用什么数据类型表示时间_第4页
mysql 中你应该使用什么数据类型表示时间_第5页
资源描述:

《mysql 中你应该使用什么数据类型表示时间》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、MySQL中你应该使用什么数据类型表示时间?当你需要保存日期时间数据时,一个问题来了:你应该使用MySQL中的什么类型?使用MySQL原生的DATE类型还是使用INT字段把日期和时间保存为一个纯数字呢?在这篇文章中,我将解释MySQL原生的方案,并给出一个最常用数据类型的对比表。我们也将对一些典型的查询做基准测试,然后得出在给定场景下应该使用什么数据类型的结论。如果你想直接看结论,请翻到文章最下方。原生的MySQLDatetime数据类型Datetime数据表示一个时间点。这可以用作日志记录、物联网时间戳、日历事件数据,

2、等等。MySQL有两种原生的类型可以将这种信息保存在单个字段中:Datetime和Timestamp。MySQL文档中是这么介绍这些数据类型的:DATETIME类型用于保存同时包含日期和时间两部分的值。MySQL以‘YYYY-MM-DDHH:MM:SS’形式接收和显示DATETIME类型的值。TIMESTAMP类型用于保存同时包含日期和时间两部分的值。DATETIME或TIMESTAMP类型的值可以在尾部包含一个毫秒部分,精确度最高到微秒(6位数)。TIMESTAMP和DATETIME数据类型提供自动初始化和更新到当前的

3、日期和时间的功能,只需在列的定义中设置DEFAULTCURRENTTIMESTAMP和ONUPDATECURRENTTIMESTAMP。作为一个例子:CREATETABLE`datetime_example`(  `id`int(11)NOTNULLAUTO_INCREMENT,  `measured_on`datetimeNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,  PRIMARYKEY(`id`),  KEY`measured_on`(`meas

4、ured_on`))ENGINE=InnoDB;CREATETABLE`timestamp_example`(  `id`int(11)NOTNULLAUTO_INCREMENT,  `measured_on`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,  PRIMARYKEY(`id`),  KEY`measured_on`(`measured_on`))ENGINE=InnoDB;除了原生的日期时间表示方法,还有另一种常用的存储日

5、期和时间信息的方法。即使用INT字段保存Unix时间(从1970年1月1日协调世界时(UTC)建立所经过的秒数)。MySQL也提供了只保存时间信息中的一部分的方式,通过使用Date、Year或Time类型。由于这篇文章是关于保存准确时间点的最佳方式的,我们没有讨论这些不那么精确的局部类型。使用INT类型保存Unix时间使用一个简单的INT列保存Unix时间是最普通的方法。使用INT,你可以确保你要保存的数字可以快速、可靠地插入到表中,就像这样:INSERTINTO`vertabelo`.`sampletable`(`id

6、`,`measured_on`###INT类型的列)VALUES(1,946684801###至01/01/2000@12:00am(UTC)的UNIX时间戳http://unixtimestamp.com);这就是关于它的所有内容了。它仅仅是个简单的INT列,MySQL的处理方式是这样的:在内部使用4个字节保存那些数据。所以如果你在这个列上使用SELECT你将会得到一个数字。如果你想把这个列用作日期进行比较,下面的查询并不能正确工作:SELECT    id,measured_on,FROM_UNIXTIME(meas

7、ured_on)FROM    vertabelo.inttimestampmeasuresWHERE    measured_on>'2016-01-01'###measured_on会被作为字符串比较以进行查询LIMIT5;这是因为MySQL把INT视为数字,而非日期。为了进行日期比较,你必须要么获取(LCTT译注:从1970-01-0100:00:00)到2016-01-01经过的秒数,要么使用MySQL的FROM_UNIXTIME()函数把INT列转为Date类型。下面的查询展示了FROM_UNIXTIME()函

8、数的用法:SELECT    id,measured_on,FROM_UNIXTIME(measured_on)FROM    vertabelo.inttimestampmeasuresWHERE    FROM_UNIXTIME(measured_on)>'2016-01-01'LIMIT5;这会正确地获取到日期

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。