以前腦海里就一念頭總以為啥時(shí)間都用int存儲(chǔ),最近在項(xiàng)目開發(fā)時(shí),頻繁見到datetime類型,對(duì)于MySQL數(shù)據(jù)庫中的有關(guān)時(shí)間的字段該選用何種類型,引發(fā)了一些爭(zhēng)論。所以做了一些簡(jiǎn)單的研究,看了一些blog和官方文檔。最后做出一個(gè)自己的總結(jié)。
公司主營業(yè)務(wù):網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出宣城免費(fèi)做網(wǎng)站回饋大家。
INT類型一般用于存儲(chǔ)Unix時(shí)間戳。使用一個(gè)簡(jiǎn)單的 INT 列保存 Unix 時(shí)間是最普通的方法。使用 INT,你可以確保你要保存的數(shù)字可以快速、可靠地插入到表中。
如果只是存儲(chǔ) Unix 時(shí)間戳(并且在它的合法日期范圍內(nèi)),而且不打算在它上面使用任何基于日期的查詢,我覺得使用 INT 是可以的。它執(zhí)行簡(jiǎn)單數(shù)值比較查詢時(shí)非常快,因?yàn)橹皇窃谔幚砗?jiǎn)單的數(shù)字。
結(jié)論:適合需要進(jìn)行大量時(shí)間范圍查詢的數(shù)據(jù)表,不支持在此字段上進(jìn)行MySQL時(shí)間函數(shù)的運(yùn)算,比如from_unixtime
Datetime 和 Timestamp 都保存日期和時(shí)間信息,同時(shí),使用人類可讀的日期形式,如 “2018-01-01”。
TIMESTAMP: A four-byte integer representing seconds UTC since the epoch (‘1970-01-01 00:00:00’ UTC)
TIMESTAMP:一個(gè)四字節(jié)的整數(shù),從1970-01-01 00:00:00開始算起。
Timestamp 和 Datetime 的核心不同點(diǎn)主要在于 MySQL在內(nèi)部如何表示這些信息:兩種都以二進(jìn)制而非字符串形式存儲(chǔ),但在表示日期/時(shí)間部分時(shí) Timestamp (4 字節(jié)) 比 Datetime (5字節(jié),從MySQL 5.6.4版本起,之前為8個(gè)字節(jié)) 少使用 1 字節(jié)。當(dāng)保存毫秒部分時(shí)兩種都使用額外的空間 (1到3 字節(jié))。
非分?jǐn)?shù)部分的DATETIME編碼(5.6.4版本之后):
1 bit sign (1= non-negative, 0= negative)
17 bits year*13+month (year 0-9999, month 0-12)
5 bits day (0-31)
5 bits hour (0-23)
6 bits minute (0-59)
6 bits second (0-59)40 bits = 5 bytes
Timestamp 節(jié)省的 1 字節(jié)是有代價(jià)的:你只能存儲(chǔ)從 ‘1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’ 之間的時(shí)間。而 Datetime 允許你存儲(chǔ)從 ‘1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’ 之間的任何時(shí)間。
另一個(gè)重要的差別是MySQL使用服務(wù)器的時(shí)區(qū)轉(zhuǎn)換Timestamp值到它的 UTC 等價(jià)值再保存。當(dāng)獲取值是它會(huì)再次進(jìn)行時(shí)區(qū)轉(zhuǎn)換,所以你得回了你“原始的”日期/時(shí)間值。Datetime 列不會(huì)被數(shù)據(jù)庫改變。無論時(shí)區(qū)怎樣配置,每次都會(huì)保存和獲取到同樣的值。
在5.6版本之后,datetime開始可以使用current time作為默認(rèn)值,所以不再有timestamp比datetime更適合作為需要隨插入和更新來變更時(shí)間的類型的說法。
結(jié)論:Datetime 是大多數(shù)場(chǎng)景下的最佳選擇,理由是
- 無需任何轉(zhuǎn)換即是人類可讀的。
- 不會(huì)因?yàn)闀r(shí)區(qū)變換產(chǎn)生問題。
- 只比它的對(duì)手們多用 1 字節(jié)
- 支持更大的日期范圍(從 1000 年到 9999 年)
沒有完美的數(shù)據(jù)類型,只要最合適的數(shù)據(jù)類型。這么多類型同時(shí)存在一定是有其道理的,了解清楚了不同類型的差異,就能選擇最合適的類型。
參考:
網(wǎng)站題目:記錄總結(jié),MySQL中的時(shí)間字段的幾種數(shù)據(jù)類型比較
轉(zhuǎn)載注明:http://www.rwnh.cn/article40/jgjjho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、建站公司、虛擬主機(jī)、云服務(wù)器、品牌網(wǎng)站建設(shè)、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)