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 [email protected]/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三种数据类型录入微秒的支持。

时间: 2024-10-10 15:17:07

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

MySQL 中的日期时间类型

日期时间类型中包含以下几种数据类型: DATE TIME DATETIME TIMESTAMP YEAR 各类型都有具体的取值范围,超出或非法的其他值时,MySQL 会回退到 0.TIMESTAMP 类型是个例外,给它设置一个超出范围的值时,将保存上该类型允许的最大值. MySQL 按标准格式 YYYY-MM-DD hh:mm:ss[.fraction] 输出日期时间,但设置或进行日期时间相关的比较时却支持灵活的多种格式,会自动解析.具体支持的输入格式可参见 Section 9.1.3, "Da

mysql日期时间类型总结

MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型        存储空间       日期格式                 日期范围 ------------ ---------   --------------------- ----------------------------------------- datetime       8 bytes   YYYY-MM-DD HH:MM:SS   1000-01-01 00:00:00 ~ 9999-12-31

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

mysql(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示  DATETIME  8 bytes  YYYY-MM-DD HH:MM:SS  1000-01-01 00:00:00 9999-12-31 23:59:59 0000-00-00 00:00:00  TIMESTAMP  4 bytes  YYYY-MM-DD HH:MM:SS  197001010

MySQL之日期时间类型

mysql(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示  DATETIME  8 bytes  YYYY-MM-DD HH:MM:SS  1000-01-01 00:00:00 9999-12-31 23:59:59  0000-00-00 00:00:00  TIMESTAMP  4 bytes  YYYY-MM-DD HH:MM:SS  19700101

MySQL学习笔记之三 表类型

你能用的数据库引擎取决于MySQL在安装时候是如何被编译的.要添加一个新的引擎,就必须编译MySQL.仅仅为了添加一个特性而编译应用程序的想法对于Windows的开发人员来说可能有点小题大做,得不偿失,但是在Unix的世界里,这已经成为了标准.在缺省的情况下,MySQL支持三个引擎:ISAM.MyISAM和HEAP.另外两种类型InnoDB和Berkley(BDB),也常常可以使用. ISAM ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之初就考虑到数据库被查询的次数远远大于

MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数

MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数 计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数,这里主要分享的是通过MySql内置的函数 TimeStampDiff() 实现. 函数 TimeStampDiff() 是MySQL本身提供的可以计算两个时间间隔的函数,语法为: TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2) 返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之

MySQL的5种时间类型的比较

日期时间类型 占用空间 日期格式 最小值 最大值 零值表示 DATETIME 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 9999-12-31 23:59:59 0000-00-00 00:00:00 TIMESTAMP 4 bytes YYYY-MM-DD HH:MM:SS 19700101080001 2038 年的某个时刻 00000000000000 DATE 4 bytes YYYY-MM-DD 1000-01-01 9999-12-

20160421字符串类型;日期时间类型数学类型

第13天 2016-04-21 一.字符串类型   string Trim() - 去头尾的空格,中间的空格不能去. ToUpper() - 把字符串的字母全变成大写. ToLower() - 把字符串的字母全变成小写. StartsWith("子串") - 是否以“子串”开头,是-true EndsWith("子串") - 是否以“子串”结尾,是-true Contains("子串") - 是否包含“子串”,是-true Substring(起

SQL Server 2008对日期时间类型的改进

微软在备受多年的争议后,终于对日期时间数据类型开刀了,在新版的SQL Server 2008中一口气增加了4种新的日期时间数据类型,包括: Date:一个纯的日期数据类型. Time:一个纯的时间数据类型. DateTime2:新的日期时间类型,将精度提到到了100纳秒. DateTimeOffset:新的日期时间类型,在DateTime2的基础上增加了时区部分. 下面是在SQL Server 2008中日期时间数据类型的一个简单汇总表: 数据类型 格式 取值范围 精度 存储尺寸 date yy