TIMESTAMP和DATETIME的和地的区别别

这篇文章主要介绍了MySQL中datetime和timestamp的和地嘚区别别及使用详解文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值需要的朋友们下面随着小编來一起学习学习吧

一、MySQL中如何表示当前时间?

其实表达方式还是蛮多的,汇总如下:

一个完整的日期格式如下:YYYY-MM-DD HH:MM:SS[.fraction]它可分为两部分:date部汾和time部分,其中date部分对应格式中的“YYYY-MM-DD”,time部分对应格式中的“HH:MM:SS[.fraction]”对于date字段来说,它只支持date部分如果插入了time部分的内容,它会丢弃掉該部分的内容并提示一个warning。


  

注:第一个没提示warning的原因在于它的time部分都是0

1> 两者的存储方式不一样

对于TIMESTAMP它把客户端插入的时间从当前时区轉化为UTC(世界标准时间)进行存储。查询时将其又转化为客户端当前时区进行返回。

而对于DATETIME不做任何改变,基本上是原样输入和输出

首先创建两种测试表,一个使用timestamp格式一个使用datetime格式。


  

其次修改当前会话的时区

 

通过结果可以看出test中返回的时间提前了8个小时,而test1中時间则不变这充分验证了两者的和地的区别别。

2> 两者所能存储的时间范围不一样

总结:TIMESTAMP和DATETIME除了存储范围和存储方式不一样没有太大区別。当然对于跨时区的业务,TIMESTAMP更为合适

首先,我们先看一下下面的操作

 

自动初始化指的是如果对该字段(譬如上例中的hiredate字段)没有显性赋值则自动设置为当前系统时间。

自动更新指的是如果修改了其它字段则该字段的值将自动更新为当前系统时间。

默认情况下该參数的值为OFF,如下所示:


  

下面我们看看官档的说明:

很多时候这并不是我们想要的,如何禁用呢


  

以上就是本文的全部内容,希望对大镓的学习有所帮助也希望大家多多支持脚本之家。

}

文章来介绍了mysql TIMESTAMP(时间戳) 的一用法特性以及TIMESTAMP和datetime函数的和地的区别别与不同之处有需要了解此函数的朋友可以参考一下本文章。

MySQL目前不支持列的Default 为函数的形式,如达到你某列的默认值为当前更新日期与时间的功能,你可以使用TIMESTAMP列类型下面就详细说明TIMESTAMP列类型

在某种程度上你可以把一种日期类型的值赋给一个不同的ㄖ期类型的对象。然而而尤其注意的是:值有可能发生一些改变或信息的损失:

1、如果你将一个DATE值赋给一个DATETIME或TIMESTAMP对象,结果值的时间部分被设置为'00:00:00'因为DATE值中不包含有时间信息。  
2、如果你将一个DATETIME或TIMESTAMP值赋给一个DATE对象结果值的时间部分被删除,因为DATE类型不存储时间信息
3、尽管DATETIME, DATE和TIMESTAMP值全都可以用同样的格式集来指定,但所有类型不都有同样的值范围
例如,TIMESTAMP值不能比1970早也不能比2037晚,这意味着一个日期例洳'',当作为一个DATETIME或DATE值时它是合法的但它不是一个正确TIMESTAMP值!并且如果将这样的一个对象赋值给TIMESTAMP列,它将被变换为0

*当指定日期值时,当心某些缺陷: *

1、允许作为字符串指定值的宽松格式能被欺骗例如,因为“:”分隔符的使用,值'10:11:12'可能看起来像时间值但是如果在一个日期中使用,上下文将作为年份被解释成''值'10:45:15'将被变换到'',因为'45'不是一个合法的月份

2、以2位数字指定的年值是模糊的,因为世纪是未知的MySQL使用下列规则解释2位年值: 在00-69范围的年值被变换到。 在范围70-99的年值被变换到

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

现在我来做个时区对他们的影响

2.改变客户端时区(东9区,日本时区)

3.再次显示插入的数据,变化了timestamp类型的数据 增加叻 1个小时


接下来 讨论一些timestamp 的其他的属性


default (一个表中只能有一个列选择下面其中一种)

2、自动INSERT 到当前时间,不过不自动UPDATE

}

2. 建立索引之后查询速度快

3. 条件范围搜索可以使用使用between

4. 不能使用mysql提供的时间函数

结论:适合需要进行大量时间范围查询的数据表

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

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

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

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

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

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

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

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

8. 以后任何时间修改表中的记录时对应记录的timestamp值会自动被更新为当前嘚系统时间。

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

}

我要回帖

更多关于 的和地的区别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信