mysql的时间和日期类型

来源:互联网 发布:为什么要学linux 编辑:程序博客网 时间:2024/05/13 17:36

一、MySQL的五种时间和日期类型

1、YEAR表示年份:字节数为1,取值范围为“1901——2155”

2、DATE表示日期:字节数为4,取值范围为“1000-01-01——9999-12-31”

3、TIME表示时间:字节数为3,取值范围为“-838:59:59——838:59:59”

DATETIME和TIMESTAMP表示日期和时间

4、DATETIME:字节数为8,取值范围为“1000-01-01 00:00:00——9999-12-31 23:59:59”

5、TIMESTAMP:字节数为4,取值范围为“19700101080001——20380119111407”

 

 

 

二、给各种时间日期类型赋值

2.1、.给YEAR赋值有3种方式

方式一:

直接插入4位字符串("1998")或者4位数字(1998)

方式二:

插入两位字符串("04")

如果范围是"00"-"69",则相当于插入"2000"-"2069"

如果范围是"70"-"99",则相当于插入"1970"-"1999"

**注:"0"和"00"的效果一样都表示2000年**

方式三:

插入两位数字(90)

插入数字和插入字符的区别在于,插入一位0表示的不是2000年,而是0000.

 

2.2、给TIME赋值

TIME类型表示为“时:分:秒”,尽管小时范围一般是0~23,但是为了表示某些特殊时间间隔,MySQL将TIME的小时范围扩发了,而且支持负值。

标准格式是"HH:MM:SS",但是不一定是这种格式,可以是

"D HH:MM:SS"

"HH:MM"

"SS"

"D HH"

"D HH:MM"

"D HH:MM:SS"相当于是"(D*24+HH):MM:SS"

eg:插入的是"2 23:50:50"="71:50:50"

"HH:MM"

eg:"11:25"="11:25:00"

"SS"

eg:"30"="00:00:30"

 

 

2.3、给DATE赋值

标准格式是"YYYY-MM-DD"、其他的还有"YYYY@MM@DD"、"YYYY.MM.DD"等

还可以用"YY-MM-DD"

 

2.4、给DATETIME赋值

标准格式为"YYYY-MM-DD HH:MM:SS"

具体赋值方法与上面各种类型的方法相似。

 

2.5、给TIMESTAMP赋值

TIMESTAMP的取值范围比较小,没有DATETIME的取值范围大,因此输入值时一定要保证在TIMESTAMP的范围之内。它的插入也与插入其他日期和时间数据类型类似。

**插入当前时间

第一,可以使用CURRENT_TIMESTAMP;

第二,输入NULL,系统自动输入当前的TIMESTAMP;

第三,无任何输入,系统自动输入当前的TIMESTAMP。

另外有很特殊的一点:TIMESTAMP的数值是与时区相关。**

 

2.6、当 MySQL遇到一个日期或时间类型的超出范围或对于该类型不合法的值时,它将该值转换为该类的"零"值。

列类型:"零"值

DATETIME:'0000-00-00 00:00:00'

DATE:'0000-00-00'

TIMESTAMP:00000000000000

TIME:'00:00:00'

YEAR:0000

 

 

四、datetime和timestamp的区别

 

3.1、datetime

1. 占用8个字节

2. 允许为空值,可以自定义值,系统不会自动修改其值。

3. 实际格式储存

4. 与时区无关

5. 不可以设定默认值,所以在不允许为空值的情况下,必须手动指定datetime字段的值才可以成功插入数据。

6. 可以在指定datetime字段的值的时候使用now()变量来自动插入系统的当前时间。

结论:datetime类型适合用来记录数据的原始的创建时间,因为无论你怎么更改记录中其他字段的值,datetime字段的值都不会改变,除非你手动更改它。

 

3.2、timestamp

1. 占用4个字节

2. 允许为空值,但是不可以自定义值,所以为空值时没有任何意义。

3. TIMESTAMP值不能早于1970或晚于2037。这说明一个日期,例如'1968-01-01',虽然对于DATETIME或DATE值是有效的,但对于TIMESTAMP值却无效,如果分配给这样一个对象将被转换为0。

4. 值以UTC格式保存

5. 时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区。

6. 默认值为CURRENT_TIMESTAMP(),其实也就是当前的系统时间。

7. 数据库会自动修改其值,所以在插入记录时不需要指定timestamp字段的名称和timestamp字段的值,你只需要在设计表的时候添加一个timestamp字段即可,插入后该字段的值会自动变为当前系统时间。

8. 若是设置了**ON UPDATE CURRENT_TIMESTAMP**以后任何时间修改表中的记录时,对应记录的timestamp值会自动被更新为当前的系统时间。

结论:timestamp类型适合用来记录数据的最后修改时间,因为只要你更改了记录中其他字段的值,timestamp字段的值都会被自动更新。

0 0