公众号上转的满天飞的一篇文章,MySQL优化相关的,无心中瞄到一句“尽可能使用TIMESTAMP而非DATETIME”,以前对TIMESTAMP也不太熟悉,不多使用,因而查了一下二者的区别。html
其实,无论在SQL Server中仍是MySQL中,“尽可能使用TIMESTAMP而非DATETIME”都是有问题的。mysql
在SQL Server中的TIMESTAMPsql
只能以默认值或者默认生成的方式插入数据数据库
对(包含了)rowversion的表中的数据行更新的时候,rowversion会自动更新。sqlserver
全局性,这里暂不表述全局性的一些细节问题。优化
MySQL中的TIMESTAMPspa
在MySQL中:3d
DATETIME :长度8字节,用来标识包含日期和时间部分的值,MySQL以‘YYYY-MM-DD HH:MM:SS’格式检索并显示DATETIME类型字段。
支持的范围是‘1000-01-01 00:00:00’ to ‘9999-12-31 23:59:59’.server
TIMESTAMP :长度4字节,用来标识包含日期和时间部分的值,
支持的范围是 ‘1970-01-01 00:00:01’ (标准时间) to ‘2038-01-19 03:14:07’ (标准时间)。htm
DATETIME 与TIMESTAMP 的不一样:
MySQL将TIMESTAMP类型的值转换为UTC时间存储,固然检索的时候以当前时区的时间返回,下面具体举例,而DATETIME则不会发生这种状况。
貌似转来转去的有点蛋疼,这个特性有什么用处?
这一点对于某些夸时区的应用显示十分有效,最最简单的就是outlook上的收发邮件的时间显示,
好比夸时区的两我的发邮件,发邮件的时间是一个肯定的时间,对于A来讲,显示本身的时区时间,对于B来讲,也是显示为本身时区的时间。
这一点就有点相似于TIMESTAMP,存储为标准时间,根据系统转换为具体的时区时间。
以上,无论在SQL Server中仍是MySQL中,DATETIME和TIMESTAMP的做用以及特性都是不一样的,SQL Server中尤甚,MySQL也有各自的特性。
选取某种字段类型,是根据须要来的,而不是说能够尽可能用哪一个,尽可能不用哪一个。
数据库中不少东西都是根据具体状况来的,网上总结的不少优化的条条框框,怎么说呢,仍是不说了!
参考:
https://dev.mysql.com/doc/refman/5.7/en/datetime.html
https://www.eversql.com/mysql-datetime-vs-timestamp-column-types-which-one-i-should-use/
https://docs.microsoft.com/zh-cn/sql/t-sql/data-types/rowversion-transact-sql?view=sql-server-2017
关于二者的区别,笔者一开始也不彻底清楚,我也是各类搜索以后简单总结了一下,无心冒犯原做者。