MySQL学习分享-->日期时间类型
日期时间类型
①如果要用来表示年月日时分秒,一般使用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学习分享-->日期时间类型的更多相关文章
- MySQL 中的日期时间类型
日期时间类型中包含以下几种数据类型: DATE TIME DATETIME TIMESTAMP YEAR 各类型都有具体的取值范围,超出或非法的其他值时,MySQL 会回退到 0.TIMESTAMP ...
- mysql日期时间类型总结
MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型 存储空间 日期格式 日期范围 ------------ ---- ...
- Mysql 建表时,日期时间类型选择
mysql(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示 D ...
- MySQL之日期时间类型
mysql(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示 D ...
- Mysql 日期时间类型详解
MySQL 中有多种数据类型可以用于日期和时间的表示,不同的版本可能有所差异,表3-2 中列出了MySQL 5.0 中所支持的日期和时间类型. 这些数据类型的主要区别如下: * 如果要用来表示年月日 ...
- MySQL建表时,日期时间类型选择
MySQL(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示 D ...
- mysql 日期时间类型 自动转型 及 运算
日期时间类型自动转型 -- now().字符串.数字转datetime类型 create table t(dt datetime);insert into t values(now());insert ...
- MySQL学习分享--Thread pool实现
基于<MySQL学习分享--Thread pool>对Thread pool架构设计的详细了解,本文主要对Thread pool的实现进行分析,并根据Mariadb和Percona提供的开 ...
- MySQL的5种时间类型的比较
日期时间类型 占用空间 日期格式 最小值 最大值 零值表示 DATETIME 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 9999-12-31 23 ...
随机推荐
- Chrome 出现adobe flash is out of date的解决方法
最近使用安装了ubuntu和linux mint,都发现firefox的flash虽然能用,但还是觉得有点小问题,想使用google chrome,但无奈,一安装使用后就发现flash不能用,显示ad ...
- Delphi制作图像特殊显示效果
Delphi制作实现图像的各种显示效果,比如百叶窗.渐变.淡入淡出.水平交错.雨滴效果等,用鼠标点击“打开图像”按钮,可以选择图像文件导入到窗体中:点击其它各个按钮,可以实现图像显示特效,例如:点击“ ...
- .hive命令的3种调用方式 以及源码
安装 hive后 在命令行 如输入 Hive -h -后面随便输入.让让他报错进入命令提示界面 -d 定义一个变量 两种形式 -d A=B or --define A=B -e 执行sql语句 hi ...
- qlv格式转换成MP4格式
腾讯视频下载:1.先下载腾讯的客户端--->播放视频在客户端 2.播放视频一段后停止 3.点击腾讯客户端的右上角的设置 4.复制缓存地址(注意:在此之前需要设置"显示隐藏的文件夹&qu ...
- endnote 使用方法
选择需要的期刊格式,复制到收藏夹. 下载安装插件. 鼠标放在需要插入引用的地方. 关键词搜索文献,记得在这之前要把需要的文献保存至endnote online.然后insert就行了.初次安装可能会有 ...
- MySQL生产库开发规范
MySQL开发规范 文件状态: [ ] 草稿 [√] 正式发布 [ ] 正在修改 文件标识: 当前版本: V1.0 作 者: 贺磊 完成日期: 2016-05-24 变更记录 序号 ...
- 将[4,3,2,5,4,3]分割成[4,3,2]、[5,4,3]两个List的算法
将[4,3,2,5,4,3]分割成[4,3,2].[5,4,3]两个List的算法 package com.srie.test; import java.util.ArrayList; import ...
- JS效果的步骤
一.写JS效果的步骤 1.先实现布局 (XHTML+CSS2) 2.实现原理 (1)希望把某个元素移除你的视线: a. display:none; 显示为无,不占据空间 b. vi ...
- php知识点总结(一)
1.把数组以表格的形式显示 <?php $array = array( '书籍' => array( '生活', '人与自然','动物世界'), '体育用品' => array ...
- 【求Java工程师/专家】大型互联网公司急招
互联网行业排名Top公司,目前项目扩张阶段,需求数量较多的JAVA中高端后台开发人员,需要有分布式系统开发经验,年后有找工作的同学可以联系我了. 工作地点:杭州 岗位要求: 1.精通Java SE和J ...