公衆號上轉的滿天飛的一篇文章,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
關於二者的區別,筆者一開始也不徹底清楚,我也是各類搜索以後簡單總結了一下,無心冒犯原做者。