日期时间类型

①如果要用来表示年月日时分秒,一般使用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. GOLang(第二篇 发起一个Http请求)

    import ( "net/http" "net/url" ) //发送一个简单的get请求 func GetRequest { //联系使用 make(map ...

  2. Angular - - form.FormController、ngModel.NgModelController

    form.FormController FormController跟踪所有他所控制的和嵌套表单以及他们的状态,就像有效/无效或者脏值/原始. 每个表单指令创建一个FormController实例. ...

  3. WPF 实现验证码功能

    产生验证码的类:ValidCode.cs public class ValidCode { #region Private Fields /// <summary> /// PI /// ...

  4. css 清除浮动的方法

    /*方法一*/ /*局部清除*/ ;visibility:hidden;display:block;clear:both;} .clr{display:inline-block;} .clr{disp ...

  5. C++ Primer 笔记 第一章

    C++ Primer 学习笔记 第一章 快速入门 1.1 main函数 系统通过调用main函数来执行程序,并通过main函数的返回值确定程序是否成功执行完毕.通常返回0值表明程序成功执行完毕: ma ...

  6. [nginx]Windows和Mac下,nginx反向代理服务器配置

    最近做项目,前端需要用到nginx反向代理来转发请求,总结了一下在Windows和Mac上的配置,以备查询. 一.Windows 修改nginx的配置文件,nginx.conf. 1)nginx.co ...

  7. 第一章:JavaScript简介

    1:JavaScript诞生于1995年 2:一个完整的JavaScript实现应该由三部分组成 * 核心(ECMAScript):提供核心语言功能 *文档对象模型(DOM):提供访问和操作网页内容的 ...

  8. python中文编码问题深入分析(一):字符编码基础

    背景:笔者作为一名刚接触python语言的新手,在实际的项目中,遇到过一些中文编码问题,初次遇到这些问题的时候,刚开始显得有些手足无措,也不知从何查起.常言道:有问题,找度娘!当我打开www.baid ...

  9. 读书笔记 effective c++ Item 6 如果你不想使用编译器自动生成的函数,你需要明确拒绝

    问题描述-阻止对象的拷贝 现实生活中的房产中介卖房子,一个服务于这个中介的软件系统很自然的会有一个表示要被销售的房屋的类: class HomeForSale { ... }; 每个房产中介会立刻指出 ...

  10. React-intl 实现多语言

    前言 React 做国际化,我推荐使用 React-intl , 这个库提供了 React 组件和Api两种方式来格式化日期,数字和字符串等.知道这个库了,那让我们开始使用它 组件用法 为了和Reac ...