日期时间类型

①如果要用来表示年月日时分秒,一般使用datetime类型;

②如果要用来表示年月日,一般使用date类型;

③如果要表示时分秒,一般使用time类型;

④如果只是表示年份,一般使用year类型,需要注意的是5.5.27版本之前(不包含该版本)year类型有2位和4位格式这两种表示,在5.5.27版本之后2位格式的year已经不再被支持,year类型的值都会以YYYY的格式显示。

year(2)被弃用我个人的理解是因为两位的显示宽度使得该类型表示模糊、不明确(显示的值仅仅是最后两位数字),因此如果在设计数据库时需要使用year数据类型,而MySQL的版本又低于5.5.27的话,建议将year类型定义为year(4)以避免问题,从5.5.27版本开始若创建表时将year类型定义为year(2),实则MySQL会强制将其定义为year(4),详见截图。

⑤如果需要经常插入系统当前时间或将时间更新为系统当前时间,一般使用timestamp类型,虽然timestamp和datetime显示格式及内容一样,但由于timestamp的范围要小于datetime的范围,因此其只占用4个字节,而datetime占用8个字节。

我们创建了一张表,列d1的数据类型为timestamp,通过查看表的定义可以看到MySQL自动将timestamp类型列的默认值设置为了current_timestamp,即系统当前时间,另外还加上了on update current_timestamp(当该行的数据发生变化时,该列的值会被更新为系统当前时间,详细效果见下面截图)。

我们为t_dt_test表新增列i1,int类型显示宽度为2,宽度不够时用0填充。

我们先为表插入一条数据,可以看到插入的d1值为2016-10-22 15:25:31,接着我们将i1的值由1更新为2,再看d1发现原本存入的时间被更新了,此时的值为2016-10-22 15:26:27,这就是随系统当前时间戳更新的效果。

对timestamp类型的列插入超出限额的值,发现MySQL会将其值置为0000-00-00 00:00:00,第一条插入的是超出timestamp最小下限的值,第二条插入的是超出timestamp最大上限的值。

对于日期时间类型的数据插入,是允许不严格的语法的。

①任何标点符号都可以用做日期部分或时间部分之间的间隔符,例如:”2016*10*24 11/11/11”、”2016*10-24 11@11/11”这两种不严格的格式都是可以正常插入的,详见截图。

虽然MySQL支持这种不严格的语法,但是建议实际插入数据时以标准格式(YYYY-MM-DD HH:MM:SS)来进行。

②对于日期部分的月和日,如果其值小于10,可以不指定两位数;对于时间部分的时分秒,如果其值小于10,也可以不指定两位数。

③YYYYMMDDHHMMSS和YYMMDDHHMMSS这两种格式的无间隔符字符串或数字,假定其对于日期类型是有意义的,则可以被正常解释并插入数据库,详见截图。

额外知识点:

我们知道若创建表时某列的数据类型为timestamp,则MySQL会为表中的第一个timestamp设置其默认值为current_timestamp,而将列中第二个timestamp的默认值设置为’0000-00-00 00:00:00’,详见如下截图。

t_dt_test_5628表后面的位数5628表示所使用的MySQL版本,这里的版本是5.6.28。

那么假如我们在创建表时就强制将两个timestamp的默认值设置为current_timestamp,会怎么样呢?

我们可以看到在5.6.28版本下,该行为是成功了,那么我们换一个较低的版本试一下。

从上图可以看到在5.1.57版本中该行为是失败的,这是因为在2012年4月10日MySQL发布的5.6.5版本中,对于‘每个表最多只可以自动初始化或更新一个timestamp列为当前日期和时间’的限制已经解除了。

以下内容摘自MySQL 5.6.5版本的发行说明:

“Previously, at most one TIMESTAMP column per table could be automatically initialized or updated to the current date and time. This restriction has been lifted. Any TIMESTAMP column definition can have any combination of DEFAULT CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP clauses. In addition, these clauses now can be used with DATETIME column definitions.”

大意为:

“以前,每个表最多可以自动初始化或更新一个TIMESTAMP列为当前日期和时间。现在此限制已取消。任何TIMESTAMP列的定义都可以具有DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP这两个子句的任意组合。此外,现在这些子句也可以使用在DATETIME列的定义中。”

与日期和时间有关的函数

1.now()、current_timestamp()、sysdate()这三个函数都可以返回当前的系统时间,那他们之间有什么区别呢?

now()和current_timestamp()这两个函数是一样的,他们返回的是执行SQL语句时的时间,而sysdate()返回的是执行到该函数时的时间。

2.如果要进行时间的加减可以使用date_add(date,interval expr unit)和date_sub(date,interval expr unit),前者是使时间增加,后者是使时间减少。expr可以是正负值,unit可以是year、month、week、day、hour、minute、second、microsecond。

3.date_format(),用于格式化打印出日期。

额外知识点:

在MySQL5.6.4版本增加了对time、datetime、timestamp三种数据类型录入微秒的支持。

MySQL学习分享-->日期时间类型的更多相关文章

  1. MySQL 中的日期时间类型

    日期时间类型中包含以下几种数据类型: DATE TIME DATETIME TIMESTAMP YEAR 各类型都有具体的取值范围,超出或非法的其他值时,MySQL 会回退到 0.TIMESTAMP ...

  2. mysql日期时间类型总结

    MySQL 日期类型:日期格式.所占存储空间.日期范围 比较.  日期类型        存储空间       日期格式                 日期范围  ------------ ---- ...

  3. Mysql 建表时,日期时间类型选择

    mysql(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示  D ...

  4. MySQL之日期时间类型

    mysql(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示  D ...

  5. Mysql 日期时间类型详解

    MySQL 中有多种数据类型可以用于日期和时间的表示,不同的版本可能有所差异,表3-2 中列出了MySQL 5.0 中所支持的日期和时间类型. 这些数据类型的主要区别如下: * 如果要用来表示年月日 ...

  6. MySQL建表时,日期时间类型选择

    MySQL(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示  D ...

  7. mysql 日期时间类型 自动转型 及 运算

    日期时间类型自动转型 -- now().字符串.数字转datetime类型 create table t(dt datetime);insert into t values(now());insert ...

  8. MySQL学习分享--Thread pool实现

    基于<MySQL学习分享--Thread pool>对Thread pool架构设计的详细了解,本文主要对Thread pool的实现进行分析,并根据Mariadb和Percona提供的开 ...

  9. MySQL的5种时间类型的比较

    日期时间类型 占用空间 日期格式 最小值 最大值 零值表示 DATETIME 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 9999-12-31 23 ...

随机推荐

  1. zepto.js swipe实现触屏tab菜单

    今天我们来说下zepto.js,有兴趣的朋友可以先进这个网站“http://zeptojs.com/” ,这个可以说是手机里的jquery,但是它取消了hover,加上了swipe及tap这两个触屏功 ...

  2. 让php Session 存入 redis 配置方法

    首先要做的就是安装redis 安装方法:http://redis.io/download Installation Download, extract and compile Redis with: ...

  3. Chrome 控制台 如何调试javascript

    上面的文章已经大致介绍了一下console对象具体有哪些方面以及基本的应用,下面简单介绍一下如何利用好chrome控制台这个神器好好调试javascript代码(这个才是我们真正能用到实处的地方) 1 ...

  4. Eclipse 自动生成getter 和 setter

    示例: public String View;//右击View > Source > Generate Getters and Setters... public String view; ...

  5. 聚类系数(clustering coefficient)计算

    转自http://blog.csdn.net/pennyliang/article/details/6838956 Clustering coefficient的定义有两种:全局的和局部的. 全局的算 ...

  6. 扩展BaseAdapter实现不存储列表项的ListView

    下面的实例将会通过扩展BaseAdapter来实现Adapter,扩展BaseAdapter可以取得对Adapter最大的控制权:程序要创建多个列表项,每个列表项的组件都由开发者来决定. 下面的布局文 ...

  7. Java NIO------基础理论之缓存区

    1.概述:NIO我的理解就是 New IO,是API1.4里提供的新的API,为所有的原始类型做缓存支持. NIO主要的核心组成部分: Buffer(缓存) Channels(通道) Selector ...

  8. RIP 相对寻址

    知识共享许可协议本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/rip-relative-addressing 本博客 ...

  9. CodeForces757A

    A. Gotta Catch Em' All! time limit per test 1 second memory limit per test 256 megabytes input stand ...

  10. page cache 与free

    我们经常用free查看服务器的内存使用情况,而free中的输出却有些让人困惑,如下: 先看看各个数字的意义以及如何计算得到: free命令输出的第二行(Mem):这行分别显示了物理内存的总量(tota ...