关于datetime,date,timestamp,year,time时间类型小结

关于datetime,date,timestamp,year,time时间类型

datetime占用8个字节

日期范围:”1000-01-01 00:00:00” 到”9999-12-31 23:59:59”

date占用3个字节

可以显示范围:”1000-01-01” 到”9999-12-31”

timestamp占用4个字节

timestamp显示结果跟datetime一样,固定格式:”YYYY-MM-DD HH:MM:SS”

不同的是:

1,timestamp占用4个字节,显示的范围”1970-01-01 00:00:00”到”2038-01-19 03:14:17”.

2,在建表时,列为timestamp的日期类型可以设置为一个默认值,而datetime不行。

3,在更新表时,可以设置timestamp类型的列自动更新为当前时间。

4,在一个表中,只能有一行指定的时间类型能指定为“TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP”,其他列的时间类型需要指定为” timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00‘”。

示例1:

CREATE TABLE t (a INT,b TIMESTAMP DEFAULT CURRENT_TIMESTAMP) ENGINE=INNODB CHARSET=utf8;

SHOW CREATE TABLE t;

INSERT INTO t(a) VALUES (1);

[email protected] 17:04>SELECT * FROM t;

+------+---------------------+

| a    | b                   |

+------+---------------------+

|    1 | 2012-12-13 17:03:58 |

+------+---------------------+

示例2:

CREATE TABLE `t2` (

`a` INT(11) DEFAULT NULL,

`b` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

) ENGINE=INNODB DEFAULT CHARSET=utf8;

//插入数据

[email protected] 17:07>insert into t2 select 1,current_timestamp;

Query OK, 1 row affected (0.00 sec)

Records: 1  Duplicates: 0  Warnings: 0

[email protected] 17:07>select * from t2;

+------+---------------------+

| a    | b                   |

+------+---------------------+

|    1 | 2012-12-13 17:07:25 |

+------+---------------------+

1 row in set (0.00 sec)

//稍微等待一下

[email protected] 17:07>update t2 set a=100;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1  Changed: 1  Warnings: 0

[email protected] 17:08>select * from t2;

+------+---------------------+

| a    | b                   |

+------+---------------------+

|  100 | 2012-12-13 17:08:16 |

+------+---------------------+

1 row in set (0.00 sec)

发现update操作后,更改了a列的值,b列的时间有原来的“2012-12-13 17:07:25” 更新为” 2012-12-13 17:08:16”。

//如果update操作更新a列的值,而实际没有改变行中的任何数据,因此b列的不会进行相应的操作。请看实例3。

实例3:

[email protected] 17:08>select * from t2;

+------+---------------------+

| a    | b                   |

+------+---------------------+

|  100 | 2012-12-13 17:08:16 |

+------+---------------------+

1 row in set (0.00 sec)

[email protected] 17:11>update t2 set a=100;

Query OK, 0 rows affected (0.00 sec)

Rows matched: 1  Changed: 0  Warnings: 0

[email protected] 17:11>select * from t2;

+------+---------------------+

| a    | b                   |

+------+---------------------+

|  100 | 2012-12-13 17:08:16 |

+------+---------------------+

1 row in set (0.00 sec)

总结下:在使用timestamp类型时,由于目前程序中时间不为NULL时,是程序赋值的。请在制定timestamp类型时,不要指定“TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP”,而指定“TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP”。这样就不会造成更新数据导致时间的更改。

yeartime类型

year类型只占用1个字节,对于year(4),显示的年份范围为1901-2155;year(2)显示年份范围为1970-2070。

time类型占用3个字节

概要:时间类型本着够用的原则,可以用timestamp就千万不要用datetime,可以用year的就不要用datetime,或则date类型。

时间: 2024-11-03 20:56:17

关于datetime,date,timestamp,year,time时间类型小结的相关文章

mysql中的时间类型datetime,date,time,year,timestamp小知识点

1.datetime,date,time,year四个类型的值,可以手动输入,也可以调用函数获得值 ① 手动输入,格式如下: datetime "2016-6-22 14:09:30" date "2016-6-22" time "14:09:30" year "2016" 如上所述,手动输入的时候,直接可以输入如上格式的字符串,注意需要加引号.其中日期和时间中的分隔符(日期的短横线"-",时间的冒号&qu

日期和时间类型

MySQL提供几种时间和日期类型,包括日期和时间类型是DATETIME.DATE.TIMESTAMP.TIME和YEAR.对这几种时间和日期类型概述如下: DATE DATE类型用在你仅需要日期值时,没有时间部分.MySQL检索并且以'YYYY-MM-DD'格式显示DATE值,支持的范围是'1000-01-01'到'9999-12-31'. 存储需求:3字节 TIME 取值范围:“-838:59:59”到“838:59:59” 你能用多中格式指定TIME值: 作为'HH:MM:SS'格式的一个字

时间类型

Java中的时间类型 java.sql包下给出三个与数据库相关的日期时间类型,分别是: Date:表示日期,只有年月日,没有时分秒.会丢失时间: Time:表示时间,只有时分秒,没有年月日.会丢失日期: Timestamp:表示时间戳,有年月日时分秒,以及毫秒. 这三个类都是java.util.Date的子类. 时间类型相互转换 把数据库的三种时间类型赋给java.util.Date,基本不用转换,因为这是把子类对象给父类的引用,不需要转换. java.sql.Date date = - jav

SQL中datetime和timestamp的区别

初学PHP+MySQL,在开发一个简单的报名程序时,要求在每一条新插入的记录后面添加一个日期字段,方便日后查询和排序.于是立即百度,发现可以使用 datetime或timestamp两种日期类型来实现.这对于爱纠结的我来说是不被允许的,于是立即去找它们的区别.但是搜出来的要么是长篇大论,要么没有重点,于是自己总结了下这些文章的精华部分,以求精益求精. datetime 1.允许为空值,可以自定义值,系统不会自动修改其值. 2.不可以设定默认值,所以在不允许为空值的情况下,必须手动指定dateti

MySql中的时间类型datetime,timestamp,date,year比较

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

java中存储mysql数据库时间类型【date、time、datetime、timestamp】

在MySQL中对于时间的存储自己见表的时候都是设置的varchar类型的,感觉挺方便的. 昨天拿别人建好的表写代码,发现这张表中时间类型为datetime的,凭感觉试了一下不行,网上查了刚开始试了好几个都是不对的,一脸懵逼. -----------------------------------------------------------------------------------------------------------------------------------------

java Date时间的各种转换方式和Mysql存时间类型字段的分析

一:各种Date之间的转换方法 public class TimeTest { public static void main(String[] args) { Date date = new Date(); // 一.获取当前系统时间和日期并格式化输出: SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 String dateTime = df.format(date); // For

mysql中 date datetime time timestamp 的区别

MySQL中关于时间的数据类型:它们分别是 date.datetime.time.timestamp.year date :"yyyy-mm-dd"  日期     1000-01-01 到 9999-12-31   3字节 time :"hh:mm:ss" 时间     -838:59:59 到 838:59:59   3字节 datetime: "yyyy-mm-dd hh:mm:ss" 日期+时间 1000-01-01 00:00:00 到

datetime 模块详解 -- 基本的日期和时间类型

转自:https://www.cnblogs.com/fclbky/articles/4098204.html datetime 模块提供了各种类用于操作日期和时间,该模块侧重于高效率的格式化输出 在 Python 中,与时间处理有关的模块包括:time,datetime 以及 calendar datetime 模块定义了两个常量: datetime.MINYEAR - date 和 datetime 对象所能支持的最小年份,object.MINYEAR 的值为 1 datetime.MAXY