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%的人还看了以下文章

  • Java Vector可实现自动增长的对象数组

    java.util.vector提供了向量类(Vector)以实现类似动态数组的功能。创建了一个向量类的对象后,可以往其中随意插入不同类的对象,即不需顾及类型也不需预先选定向量的容量,并可以方便地进行查找。 对于预先不知或者不愿预先定义数组大小,并且需要频繁地进行查找,插入,删除工作的情况,可以考虑使用向量类。 向量类提供了三种构造方法: public ve…

    2020年8月20日
    6.3K0
  • Vim编辑器常用命令大全

    编辑和保存文件 vim filename为编辑一个文件,若此文件不存在,则Vim会以filename为名创建这个文件。 启动Vim时自动处于命令模式,按I键可以进入插入模式,这个命令用于在当前光标所在处插入字符。 保存和退出 命令 操作 :w 保存文件 :w filename 另存为filename :q 退出Vim :q! 强制退出Vim,用于放弃保存修改…

    2022年9月22日
    2.2K0
  • myeclipse的视图显示:如何显示上下拆分的视图,design视图和Preview预览视图合并

    MyEclipse10打开JSP页面发现只有代码视图,想同时看到design视图和代码视图,如何把这两个视图显示出来? myeclipse显示上下拆分的design视图和代码视图方法 1、在JSP页面上右键单击,选择open with->web page editors,如果显示里没有web page editors,需要单击Other……,在里面选择…

    2018年10月10日
    6.3K0
  • MVC(JSP+JavaBean+Servlet)+MYSQL入门实例:实现用户登陆

    MVC(JSP+JavaBean+Servlet)+MYSQL入门实例:实现用户登陆MVC(JSP+JavaBean+Servlet)+MYSQL入门实例:实现用户登陆MVC(JSP+JavaBean+Servlet)+MYSQL入门实例:实现用户登陆MVC(JSP+JavaBean+Servlet)+MYSQL入门实例:实现用户登陆

    MVC(JSP+JavaBean+Servlet)+MYSQL实现用户登陆模块,具体功能: 客户在登陆页面Login.html输入用户名和密码,提交表单,由Servlet(LoginValidate.java)调用JavaBean(LoginDBO.java)验证用户名和密码,最后调用视图returnMessage.jsp显示,如果成功显示成功信息,不成功显…

    2018年11月27日 编程开发
    21.8K0
  • Python+ 人工智能软件工程师要学习哪些课程?

    1. Python 软件开发基础 2. Python 高级编程 3. Python 全栈式 WEB 工程师 4. Python 爬虫工程师、大数据分析工程师、人工智能工程师

    2018年12月27日
    17.6K0
  • MyEclipse中JSP的页面编码-中文乱码快速解决

    MyEclipse中JSP的页面编码-中文乱码快速解决MyEclipse中JSP的页面编码-中文乱码快速解决MyEclipse中JSP的页面编码-中文乱码快速解决MyEclipse中JSP的页面编码-中文乱码快速解决

    MyEclipse中页面默认编码为”ISO8859-1″,如果输入了中文会显示乱码: 保存时会弹出如下图的提示对话框。 在myeclipse中如何更改jsp的默认编码 或 jsp页面代码: <%@ page language=”java” import=”java.util.*” contentType=”text/html; …

    2018年12月24日 编程开发
    9.2K0

发表回复

登录后才能评论

评论列表(1条)

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

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

    java.util.Date 包含日期

    java.util.Time 包含时间

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