MySql数据库Timestamp、time、datetime 区别及使用详解

对于数据库来说,有多种日期时间字段可供选择,如 timestamp 和 datetime 。

不仅新手,包括一些有经验的程序员还是比较迷茫,究竟我该用哪种类型来存储日期时间呢?

一个完整的日期格式如下:YYYY-MM-DD HH:MM:SS[.fraction],它可分为两部分:date部分和time部分,其中,date部分对应格式中的“YYYY-MM-DD”,time部分对应格式中的“HH:MM:SS[.fraction]”。对于date字段来说,它只支持date部分,如果插入了time部分的内容,它会丢弃掉该部分的内容,并提示一个warning。

一、时间戳(Timestamp):

一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。

使用数字签名技术产生的数据, 签名的对象包括了原始文件信息、 签名参数、 签名时间等信息。广泛的运用在知识产权保护、 合同签字、 金融帐务、 电子报价投标、 股票交易等方面。

Timestamp范围是’1970-01-01 00:00:00’到2037年,精度为一秒,其值作为数字显示。

TIMESTAMP列用于INSERT或UPDATE操作时记录日期和时间。
如果你不分配一个值,表中的第一个TIMESTAMP列自动设置为最近操作的日期和时间。
Timestamp类型的值,在insert记录时由SQL自动加入。
也可以通过分配一个NULL值,将TIMESTAMP列设置为当前的日期和时间。
TIMESTAMP值返回后显示为’YYYY-MM-DD HH:MM:SS’格式的字符串,
显示宽度固定为19个字符。

Timestamp值显示尺寸的格式如下表所示:

+---------------+----------------+
| 列类型    | 显示格式    |
| TIMESTAMP(14) | YYYYMMDDHHMMSS | 
| TIMESTAMP(12) | YYMMDDHHMMSS  |
| TIMESTAMP(10) | YYMMDDHHMM   |
| TIMESTAMP(8) | YYYYMMDD    |
| TIMESTAMP(6) | YYMMDD     |
| TIMESTAMP(4) | YYMM      |
| TIMESTAMP(2) | YY       |
+---------------+----------------+

“完整”TIMESTAMP格式是14位,但TIMESTAMP列也可以用更短的显示尺寸,创造最常见的显示尺寸是6、8、12、和14。
你可以在创建表时指定一个任意的显示尺寸,但是定义列长为0或比14大均会被强制定义为列长14。

1.虽然你建表时定义了列TIMESTAMP(8),但在你进行数据插入与更新时TIMESTAMP列实际上保存了14位的数据(包括年月日时分秒),只不过在你进行查询时MySQL返回给你的是8位的年月日数据。如果你使用ALTER TABLE拓宽一个狭窄的TIMESTAMP列,以前被“隐蔽”的信息将被显示。

2.同样,缩小一个TIMESTAMP列不会导致信息失去,除了感觉上值在显示时,较少的信息被显示出。

TIMESTAMP时间戳在创建的时候可以有多重不同的特性,如:

1.在创建新记录和修改现有记录的时候都对这个数据列刷新:

TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

2.在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它:

TIMESTAMP DEFAULT CURRENT_TIMESTAMP

3.在创建新记录的时候把这个字段设置为0,以后修改时刷新它:

TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

4.在创建新记录的时候把这个字段设置为给定值,以后修改时刷新它:

TIMESTAMP DEFAULT ‘yyyy-mm-dd hh:mm:ss' ON UPDATE CURRENT_TIMESTAMP

 二、TIME

时间。范围是’-838:59:59’到’838:59:59’。
MySQL以’HH:MM:SS’格式显示TIME值,但允许使用字符串或数字为TIME列分配值。

使用now()显示’HH:MM:SS’

使用UNIX_TIMESTAMP()显示’-838:59:59’到’838:59:59’。

三、DATETIME

日期和时间的组合。
支持的范围是’1000-01-01 00:00:00’到’9999-12-31 23:59:59’。
MySQL以’YYYY-MM-DD HH:MM:SS’格式显示DATETIME值,但允许使用字符串或数字为DATETIME列分配值。

其他:now()、curdate()、curtime()

NOW()函数以`’YYYY-MM-DD HH:MM:SS’返回当前的日期时间,可以直接存到DATETIME字段中。
CURDATE()以’YYYY-MM-DD’的格式返回今天的日期,可以直接存到DATE字段中。
CURTIME()以’HH:MM:SS’的格式返回当前的时间,可以直接存到TIME字段中。

Timestamp相比于datetime的区别:

timestamp占4字节,datetime占8字节;
包含时区信息,如果日后修改了时区的话,timestamp所表示的时间会随时区而变化,而datetime不会。

timestamp 更适合来记录时间,比如我在东八区时间现在是 2016-08-02 10:35:52, 你在日本(东九区此时时间为 2016-08-02 11:35:52),我和你在聊天,数据库记录了时间,取出来之后,对于我来说时间是 2016-08-02 10:35:52,对于日本的你来说就是 2016-08-02 11:35:52。所以就不用考虑时区的计算了。

timestamp的劣势:只能表示从1970年到2038年的时间,而datetime (1000-9999)。

性能方面比较,timestamp是纯数字,计算要快一些,但人类不可读,还必须要经过函数转化,datetime是字符串类型,人类肉眼直接可读,虽然计算加减乘除时要经过一道转化。

推荐阅读:Java向mysql数据库插入datetime类型数据实例(精)

125jz网原创文章。发布者:江山如画,转载请注明出处:http://www.125jz.com/1843.html

(3)
江山如画的头像江山如画管理团队
上一篇 2018年4月28日 上午11:57
下一篇 2018年5月2日 下午3:09

99%的人还看了以下文章

  • 单元测试工具JUnit介绍及使用,单元测试快速入门教程五

    JUnit是一个开放源代码的测试框架,用在编写和运行可重复的测试脚本之上,是用于Java语言编写的面向对象程序的单元测试工具。JUnit框架功能强大,目前已经成为Java单元测试的事实标准,基本上能满足日常的测试要求。 1.Junit主要特性 (1)可以将测试代码和产品代码分别开发,便于管理。 (2)针对某一个类的测试代码,以较少的改动便可以应用    另一…

    2018年4月18日 编程开发
    5.5K0
  • 第二章 Web技术简介

    1. 掌握HTML 5标记语言
    2. 掌握CSS样式表的使用
    3. 掌握JavaScript脚本语言
    4. 能够使用HTML5+CSS+JS 进行web页面设计

    2018年2月2日
    5.7K0
  • 动态网站开发技术asp、asp.net、php、jsp比较

    asp、asp.net、php、jsp技术简介 ASP 全称为Active Server Pages(中文译名为活动服务器页面),是微软公司推出的用于Web应用服务的一种编程技术.采用的脚本语言: VBScript 和JavaScript。 ASP.NET 微软公司很快公布了其宏伟的“Windows.NET”计划,发布了成为下一代网络服务框架的NGWS,同时…

    2018年3月15日
    2.3K0
  • Undefined variable: file python3不再支持file函数

    python处理文件时,使用file函数,提示错误:Undefined variable: file 反复查看语法,没有问题啊,最后查找到原因: python3不再支持file函数 替代方法:可以用open代替file 函数。

    2019年3月29日
    7.6K0
  • 第一个Spring MVC 项目:Hello World(Eclipse版)

    125建站网前面分享了《Spring框架概述》,新学习的同学可以先阅读引文章,今天给大家分享第一个Spring MVC实战项目:Hello World 目录  一、MVC概要 二、Spring MVC介绍 三、第一个Spring MVC 项目:Hello World(Eclipse版) 3.1、通过Maven新建一个Web项目 3.2、添加依赖的jar包 3…

    2023年1月24日 编程开发
    6490
  • object…object和object[]…object的区别

    object…object public int update(String sql, Object… params) throws SQLException { Connection conn = this.prepareConnection(); return this.update(conn, true, sql, params); }…

    2019年11月19日
    2.6K0

发表回复

登录后才能评论

评论列表(1条)

  • 江山如画的头像
    江山如画 2018年7月3日 上午10:29

    数据库里面的datetime对应java里面的:java.util.Date

    java.util.Date 包含日期

    java.util.Time 包含时间

    java.util.Timestamp 包含日期和时间