MySQL时间戳(时间戳)使用详细说明
TIMESTAMP timestamps can have many different features when they are created, such as:
1。当创建新记录并修改现有记录时,将刷新数据列:
默认current_timestamp current_timestamp更新时间戳
2。在创建新记录时将该字段设置为当前时间,但在稍后修改时不再刷新该字段:
时间戳默认current_timestamp
三.在创建新记录时将此字段设置为0,并在稍后修改时刷新它:
current_timestamp更新时间戳
4。在创建新记录时将字段设置为给定值,并在稍后修改时刷新它:
时间戳默认yyyy-mm-dd HH:毫米:SS的更新current_timestamp
MySQL目前不支持默认的函数形式。例如,如果将某列的默认值作为当前更新日期和时间的函数,则可以使用时间戳列类型,然后在下文中详细地指定时间戳列的类型。
二、时间戳列类型
时间戳值可以从1970到2037,精度为1秒,其值显示为一个数字。
时间戳值显示的格式如下表所示:
:
--------------- ---------------- + + +
|柱型| |显示格式
|时间戳(14)yyyymmddhhmmss | |
|时间戳(12)yymmddhhmmss | |
|时间戳(10)yymmddhhmm | |
|时间戳(8)| | YYYYMMDD
|时间戳(6)收到录取通知时间| |
|时间戳(4)输入时间| |
|时间戳(2)| | YY
--------------- ---------------- + + +
完整的时间戳格式是14位,但时间戳列也可以使用较短的显示大小,以创建最常用的显示大小为6, 8, 12和14。
可以在创建表时指定任意显示大小,但列长度为0或14将被定义为列长度14。
柱长在1~13范围内的奇异值被强迫为下一个较大的偶数。
清单如下:
定义字段长度强制字段长度
时间戳(0),时间戳(14)
时间戳(15),时间戳(14)
时间戳(1),时间戳(2)
时间戳(5),时间戳(6)
所有的时间戳列都具有相同的存储大小,并使用指定时间段的完整精度(14位)来存储合法值而不考虑显示大小。非法日期将被迫为0存储。
有几个含义:
1。虽然你建表定义的列的时间戳(8),但数据插入和更新时间戳列时,你真的救了14位数据(包括年月日时),但是当你查询MySQL返回给你的是8位数据的日期。如果你使用ALTER TABLE来扩大狭窄的时间戳列,隐藏的信息将被显示。
2。另外,缩短时间戳列不会导致信息丢失,但显示感官值时会显示更少的信息。
三.虽然时间戳值存储为一个完整的精度,直接操作功能存储值仅是unix_timestamp(MySQL的时间戳);因为返回的列值值检索到的格式,这意味着你可以使用一些函数操作的时间戳列(如小时)或第二(())。除非时间戳值的相关部分包含在格式化值中。
例如,当时间戳列仅定义为时间戳(10)时,将显示时间戳列的HH部分。因此,在更短的时间戳值上使用小时(时间戳)会产生不可预知的结果。
4。非法的时间戳值转换为适当的类型的值为零(00000000000000)。(日期,日期也)
例如,您可以使用以下语句来验证:
创建测试表('id'int(3)无符号auto_increment,'date1
时间戳(8)主键('id'));
插入到测试集id = 1;
从测试中选择*;
+——+ ---------------- +
| ID | date1 |
+——+ ---------------- +
| 1 | 20021114 |
+——+ ---------------- +
修改表的测试change'date1 ''date1的时间戳(14);
从测试中选择*;
+——+ ---------------- +
| ID | date1 |
+——+ ---------------- +
| 1 | 20021114093723 |
+——+ ---------------- +
可以使用时间戳列类型以当前日期和时间自动标记插入或更新操作。
如果有多个时间戳列,只有第一个自动更新。第一个时间戳列的自动更新发生在下列任何一种情况下:
1。列的值不在插入或LOAD DATA INFILE语句显式指定。
2。在一个UPDATE语句中没有显式指定列值,而其他列则更改值(注意更新将列设置为其现有值,这不会导致时间戳列被更新,因为如果将列设置为当前值,MySQL将忽略效率的变化。)
三.您显式地将时间戳列设置为null。
4。只有第一个日期和时间的时间戳列也可以设置为当前日期和时间,只要列设置为null或现在()。
创建表(测试)
id'int(3)无符号auto_increment,
date1'timestamp(14),
date2'timestamp(14),
主键('id')
);
插入测试(ID,date1,日期2)值(1,null,null);
插入到测试集id = 2;
+ -- + + + ---------------- ----------------
我要把| | | |
+ -- + + + ---------------- ----------------
| 1 | 20021114093723 | 20021114093723 |
| 2 | 20021114093724 | 00000000000000 |
+ -- + + + ---------------- ----------------
设置日期1第一指令,把空,所以要把价值,第二指示当前时间因为没有很久,把价值的列,第一列为时间戳要到当前时间更新,和两柱把日期时间戳是不合法的,改为00000000000000
更新测试集id = 3,其中id = 1;
+ -- + + + ---------------- ----------------
我要把| | | |
+ -- + + + ---------------- ----------------
| 3 | 20021114094009 | 20021114093723 |
| 2 | 20021114093724 | 00000000000000 |
+ -- + + + ---------------- ----------------
本指令不明确设定的日期2列值,所以第一时间戳列要将更新为当前时间
更新测试集ID = 1,= =现在很久很久,把()id是3;
+ -- + + + ---------------- ----------------
我要把| | | |
+ -- + + + ---------------- ----------------
| 1 | 20021114094009 | 20021114094320 |
| 2 | 20021114093724 | 00000000000000 |
+ -- + + + ---------------- ----------------
这个命令是设置日期1 =很久,所以当更新数据,该日期1列的值不会改变。由于设置日期2 =现在(),数据更新时,把列的值将被更新为当前时间。此指令相当于:
更新测试集ID = 1,日期1 = date1,把ID = 3 =零;
因为MySQL返回的时间戳列是数字显示,你可以用date_fromat timestamp列格式()函数,如下所示:
选择ID,date_format(DATE1,% y %M - %:%我:%s)为要,
date_format(date2,% y %M - %:%我:%s)是把从测试;
+ -- + + + --------------------- ---------------------
我要把| | | |
+ -- + + + --------------------- ---------------------
| 1 | 2002-11-14 09:40:09 2002-11-14 09:43:20 | |
| 2 | 2002-11-14 09:37:24 0000-00-00 | | 00:00:00
+ -- + + + --------------------- ---------------------
选择ID,date_format(DATE1,% y %M - %d)为要,
date_format(date2,% y %M - %d)是把从测试;
+ -- + + + ------------- -------------
我要把| | | |
+ -- + + + ------------- -------------
| 1 | 2002-11-14 | 2002-11-14 |
| 2 | 2002-11-14 | 0000-00-00 |
+ -- + + + ------------- -------------
在某种程度上,可以将日期类型的值分配给不同日期类型的对象。
然而,特别值得注意的是,信息的价值或损失可能会发生一些变化:
1、如果你的日期或时间戳的对象指定一个日期值、时间值结果部分设置为'00:00:00 ',因为日期值不包含时间信息。 U3000 U3000
2。如果你的约会对象指定一个日期或时间戳值、时间值结果部分删除,因为数据类型不存储时间信息。
三.虽然日期时间,日期和时间戳值都可以在相同的格式设置指定,所有类型不具有相同的值的范围。
例如,时间戳值不能超过1970或2037的时候,这意味着一个日期,如'1968-01-01 ',是合法的当它作为日期或日期值,但它不是一个正确的时间戳值。如果该对象被分配到的时间戳列,它将转变0。
三。指定日期值时,要小心一些缺陷:
1。允许指定值散格式作为一个字符串是骗人的。例如,因为:分离器的使用价值'10:11:12'may像时间价值,但如果用在一个日期,上下文将被解释为'2010-11-12今年,价值'10:45:15'will转化为'0000-00-00 ',因为'45'is不是正当月。
2。2位数指定的年值是模糊的,因为世纪unknown.mysql使用下面的规则来解释2位年度价值:
在00-69范围每年的值转换为2000-2069.the每年价值70与99范围转换为1970。