引言
今天我們把知識(shí)的焦點(diǎn)投向數(shù)據(jù)庫(kù)方面,因?yàn)閿?shù)據(jù)庫(kù)是應(yīng)用程序的基石,是一切生產(chǎn)的動(dòng)力。先說(shuō)一個(gè)小小的知識(shí)點(diǎn),在存儲(chǔ)日期時(shí)間時(shí),應(yīng)該選用 timestamp 時(shí)間戳類型,還是應(yīng)該用 datettime 類型?

兩者有何不同,效率如何,以及各自的優(yōu)劣。
學(xué)習(xí)時(shí)間
MySQL中的 timestamp 通常用于跟蹤記錄的更改,并且通常在每次記錄更改時(shí)進(jìn)行更新。如果要存儲(chǔ)特定值,則應(yīng)使用 datetime 字段。
如果你在這兩者之間猶豫不決,那就請(qǐng)優(yōu)先使用時(shí)間戳。買搜狗中提供了。內(nèi)置的函數(shù)用于時(shí)間,日期格式轉(zhuǎn)換和計(jì)算,使用起來(lái)非常方便。比如日期時(shí)間差計(jì)算:
SELECT DATE_ADD(my_datetime, INTERVAL 1 DAY)
或者是對(duì)UNIX時(shí)間戳的格式轉(zhuǎn)換:
SELECT UNIX_TIMESTAMP(my_datetime)
如果要使用php對(duì)記錄進(jìn)行查詢,則可以很容易地將值的格式更改為UNIX時(shí)間戳。
一個(gè)重要的區(qū)別是,DATETIME表示日期(如在日歷中查找),和時(shí)間(如在時(shí)鐘上可以看到),而TIMESTAMP表示明確定義的時(shí)間點(diǎn)。
如果應(yīng)用程序處理時(shí)區(qū),那么這可能非常重要。 比如多久以前是'2019-09-01 16:31:00'? 這取決于你所在的時(shí)區(qū)。對(duì)我來(lái)說(shuō),這只是幾秒鐘前,對(duì)你來(lái)說(shuō),它可能代表將來(lái)的時(shí)間。
相應(yīng)地,如果我說(shuō)自“ 1970-01-01 00:00:00 UTC”以來(lái)的1283351460秒,那么您確切地知道我在說(shuō)什么時(shí)間點(diǎn)。
深入學(xué)習(xí)
時(shí)間戳 timestamp 在系統(tǒng)失去改變之后,會(huì)自動(dòng)變化。這在程序生產(chǎn)數(shù)據(jù)時(shí),會(huì)有影響。我們通過(guò)例子來(lái)說(shuō)明。

首先在系統(tǒng)變量中查看 time_zone 相關(guān)配置。

創(chuàng)建新表并寫入兩個(gè)數(shù)值。

查看寫入的數(shù)據(jù)。

修改時(shí)區(qū),再次查看表內(nèi)的值。我們發(fā)現(xiàn),timestamp 類型的字段時(shí)間隨著時(shí)區(qū)的改變發(fā)生了改變。而 datetime 字段則不會(huì)改變。
寫在最后
本文通過(guò)對(duì)比 timestamp & datetime 字段的優(yōu)劣和使用場(chǎng)景進(jìn)行了闡述,并使用例子展示 timestamp 的便捷性,和隱藏的問(wèn)題。
HAppy coding :_)