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

  • 纯JSP实现计算圆的面积和周长

    一个jsp页面由元素和模板数据组成.元素是必须由jsp容器处理的部分.而模板数据是jsp容器不处理的部分,如jsp中的HTML内容 元素有三种类型: 脚本元素,指令元素, 动作元素 脚本元素:包含三个部分:声明,脚本段,表达式 声明:用于声明在其它脚本元素中可以使用的变量和方法 脚本段:是一段java代码 表达式:java语言中完整的表达式 声明 以<…

    2020年4月3日
    8.3K0
  • ADODB.Connection ���� ‘800a0e7a’ win7 IIS运行ASP常见问题及解决方法

    在win7系统通过 IIS运行ASP出现以下错误提示: ADODB.Connection 错误 ‘800a0e7a’ 很多人根据错误提示,去查数据库连接代码,其实数据库的连接代码没有错误。 出现ADODB.Connection 错误 ‘800a0e7a’的 原因 是64位Windows7操作系统中,IIS7应用程序池默认没有启用32位应用程序,而我们连接AC…

    2018年6月1日
    3.1K0
  • OpenCV-最优秀的Python人脸识别库安装及入门教程

    OpenCV库(open source computer vision library)是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上,具有跨平台特性,轻量级且高效,实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV用C++语言编写,它具有C ++,P…

    2020年12月8日
    2.3K2
  • python turtle绘画0基础练习

    一、题目:导入turtle包(import turtle),绘制边长为100的正方形。 要求: 1、新建一个“turtle2.py”文件 2、编写程序。 3、调试程序。 4、排除错误。 二、导入turtle包(import turtle),绘制半径为40的圆(circle)。 三、题目:导入turtle包(import turtle),绘制边长为60的等边三…

    2023年6月15日
    6430
  • 推荐!一个通用的javaBean很方便的实现连接数据库、查询、插入、修改功能

    这是一个通用的javaBean,能够很方便的实现连接数据库、查询、插入、修改功能。、 package com.common; import java.sql.*; public class DataBaseConn { public Connection conn = null; public void createConn(){ String DRIVER…

    2020年12月6日
    1.2K0
  • python 字典使用实例:创建通信录并完成修改、查找操作

    练习目的:巩固python 字典的创建,合并,修改及使用。 学了python字典后,同学们想创建一个自己的通信录,小明是这么做的: 先根据三位舍友的联系方式创建一个字典dicTXL 然后将隔壁舍长已创建好的字典dicOther合并进自己的通信录 合并之后,小明又打算给通信录增加一列“微信号”,为此他询问了相关同学的微信号并存储在了字典dicWX中,然后合并进…

    2020年1月22日
    12.4K0

发表回复

登录后才能评论

评论列表(1条)

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

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

    java.util.Date 包含日期

    java.util.Time 包含时间

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