datetime和timestamp的区别是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了datetime和timestamp的区别是啥?相关的知识,希望对你有一定的参考价值。

datetime和timestamp是出现在mysql和SqlServer数据库中的。
MySQL中datetime和timestamp的区别:
(一)范围不同。
“datetime” 以\'YYYY-MM-DD HH:MM:SS\'格式检索和显示DATETIME值。支持的范围为\'1000-01-01 00:00:00\'到\'9999-12-31 23:59:59\'TIMESTAMP值不能早于1970或晚于2037
(二)储存不同。
1,TIMESTAMP
①4个字节储存(Time stamp value is stored in 4 bytes)
②值以UTC格式保存( it stores the number of milliseconds)
③时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区。
2,datetime
①8个字节储存(8 bytes storage)
②实际格式储存(Just stores what you have stored and retrieves the same thing which you have stored.)
③与时区无关(It has nothing to deal with the TIMEZONE and Conversion.)

注:TIMESTAMP列的显示格式与datetime列相同。

SqlServer中datetime和timestamp在中用法区别基本都差不多。
datetime :
SqlServer中用两个 4 字节的整数内部存储 datetime 数据类型的值。第一个 4 字节存储 base date(即 1900 年 1 月 1 日)之前或之后的天数。基础日期是系统参考日期。不允许早于 1753 年 1 月 1 日的 datetime 值。另外一个 4 字节存储以午夜后毫秒数所代表的每天的时间。
注:smalldatetime 数据类型存储日期和每天的时间,但精确度低于 datetime。SQL Server 将 smalldatetime 的值存储为两个 2 字节的整数。第一个 2 字节存储 1900 年 1 月 1 日后的天数。另外一个 2 字节存储午夜后的分钟数。日期范围从1900 年 1 月 1 日到 2079 年 6 月 6 日,精确到分钟。
timestamp:timestamp 这种数据类型表现自动生成的二进制数,确保这些数在数据库中是唯一的。timestamp 一般用作给表行加版本戳的机制。存储大小为 8 字节。
参考技术A 一、区别:
1、DATETIME类型用在你需要同时包含日期和时间信息的值时。MySQL检索并且以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。

2、TIMESTAMP列类型提供一种类型,可以使用它自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果有多个TIMESTAMP列,只有第一个自动更新。

二、简介
1)TIMESTAMP
1.4个字节储存(Time stamp value is stored in 4 bytes)
2.值以UTC格式保存( it stores the number of milliseconds)
3.时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区。

2)datetime
1.8个字节储存(8 bytes storage)
2.实际格式储存(Just stores what you have stored and retrieves the same thing which you have stored.)
3.与时区无关(It has nothing to deal with the TIMEZONE and Conversion.)
参考技术B DATETIME
日期和时间的组合。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。MySQL以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,但允许使用字符串或数字为DATETIME列分配值。
TIMESTAMP[(M)]
时间戳。范围是'1970-01-01 00:00:00'到2037年。
TIMESTAMP列用于INSERT或UPDATE操作时记录日期和时间。如果你不分配一个值,表中的第一个TIMESTAMP列自动设置为最近操作的日期和时间。也可以通过分配一个NULL值,将TIMESTAMP列设置为当前的日期和时间。

TIMESTAMP值返回后显示为'YYYY-MM-DD HH:MM:SS'格式的字符串,显示宽度固定为19个字符。如果想要获得数字值,应在TIMESTAMP 列添加+0。

注释:MySQL 4.1以前使用的TIMESTAMP格式在MySQL 5.1中不支持;关于旧格式的信息参见MySQL 4.1 参考手册。

Blueprint 类的 timestamp() 和 dateTime() 方法之间的区别

【中文标题】Blueprint 类的 timestamp() 和 dateTime() 方法之间的区别【英文标题】:Difference between timestamp() and dateTime() methods of the Blueprint class 【发布时间】:2018-06-01 09:01:12 【问题描述】:

在 Laravel 中,Illuminate\Database\Schema\Blueprint 类有两个方法,我想具体了解它们之间的区别。

$table->dateTime() 

$table->timestamp()

两者都以相同的方式明显地存储日期。 有没有大神赐教?

【问题讨论】:

【参考方案1】:

因此,秘诀在于了解每个人的具体作用。

Laravel 中的 dateTime()timestamp() 函数使用不同的表列。

dateTime() 使用 DATETIME 作为 DB 列类型。 timestamp() 使用 TIMESTAMP 作为 DB 列类型。

DATETIMETIMESTAMP 有很多相似之处,但不同之处在于 Laravel 之外,而在 MySQL 中则更多。

它们的主要区别在于范围。对于 DateTime,它的最高年份为 9999,而对于时间戳,其最高年份为 2038。其他差异包括存储每个所需的字节数。

我找到了一篇很好的文章,在这里http://www.c-sharpcorner.com/article/difference-between-mysql-datetime-and-timestamp-datatypes/@

清楚地说明了两者的异同

希望这会有所帮助。

【讨论】:

【参考方案2】:

$table->dateTime() 在表上创建一个新的日期时间列。而另一方面, $table->timestamp() 在表上创建一个新的时间戳列。

如果您在识别 timestampdatetime 之间的差异时遇到问题,

DATETIME 表示日期(在日历中找到)和时间(可以在挂钟上观察到)

还有,

TIMESTAMP 表示一个明确定义的时间点。如果您的应用程序处理时区,这可能非常重要。 '2010-09-01 16:31:00' 是多久以前的事了?这取决于你所在的时区。

另外,如有任何不便,您可以参考BluePrint Documentation。

【讨论】:

【参考方案3】:

timestampdateTime 将日期 (YYYY-MM-DD) 和时间 (HH:MM:SS) 一起存储在单个字段中,即 YYYY-MM-DD HH:MM:SS。

两者之间的区别在于timestamp 可以使用CURRENT_TIMESTAMP 作为其值,无论何时更新数据库记录。

timestamp 的限制为 1970-01-01 00:00:01 UTC 到 2038-01-19 03:14:07 UTC dateTime 的范围为 1000-01-01 00:00:00至 9999-12-31 23:59:59 UTC

timestamps 不带参数,它是将created_atupdated_at 时间戳字段添加到数据库的快捷方式。

【讨论】:

如果我理解的话,如果它是我的 DBMS,这两个函数都绑定到 MySQL ? 那么在 2038 年我们会再次遇到千年虫问题吗?

以上是关于datetime和timestamp的区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章

datetime和timestamp的区别

MySQL中datetime和timestamp的区别

MySQL中datetime和timestamp的区别

timestamp和date及datetime的区别

date,datetime,time timestamp 用法怎样区分

MySQL 中 datetime 和 timestamp 的区别与选择