MySQL 中 datetime 和 timestamp 的區(qū)別與選擇
MySQL 中常用的兩種時間儲存類型分別是datetime和 timestamp。如何在它們之間選擇是建表時必要的考慮。下面就談?wù)勊麄兊膮^(qū)別和怎么選擇。
1 區(qū)別
1.1 占用空間
| 類型 | 占據(jù)字節(jié) | 表示形式 |
|---|---|---|
| datetime | 8 字節(jié) | yyyy-mm-dd hh:mm:ss |
| timestamp | 4 字節(jié) | yyyy-mm-dd hh:mm:ss |
1.2 表示范圍
| 類型 | 表示范圍 |
|---|---|
| datetime | '1000-01-01 00:00:00.000000' to '9999-12-31 23:59:59.999999' |
| timestamp | '1970-01-01 00:00:01.000000' to '2038-01-19 03:14:07.999999' |
timestamp翻譯為漢語即"時間戳",它是當(dāng)前時間到 Unix元年(1970 年 1 月 1 日 0 時 0 分 0 秒)的秒數(shù)。對于某些時間的計算,如果是以 datetime 的形式會比較困難,假如我是 1994-1-20 06:06:06 出生,現(xiàn)在的時間是 2016-10-1 20:04:50 ,那么要計算我活了多少秒鐘用 datetime 還需要函數(shù)進(jìn)行轉(zhuǎn)換,但是 timestamp 直接相減就行。
1.3 時區(qū)
timestamp 只占 4 個字節(jié),而且是以utc的格式儲存, 它會自動檢索當(dāng)前時區(qū)并進(jìn)行轉(zhuǎn)換。
datetime以 8 個字節(jié)儲存,不會進(jìn)行時區(qū)的檢索.
也就是說,對于timestamp來說,如果儲存時的時區(qū)和檢索時的時區(qū)不一樣,那么拿出來的數(shù)據(jù)也不一樣。對于datetime來說,存什么拿到的就是什么。
還有一個區(qū)別就是如果存進(jìn)去的是NULL,timestamp會自動儲存當(dāng)前時間,而 datetime會儲存 NULL。
2 測試
我們新建一個表

插入數(shù)據(jù)

查看數(shù)據(jù),可以看到存進(jìn)去的是NULL,timestamp會自動儲存當(dāng)前時間,而 datetime會儲存NULL

把時區(qū)修改為東 9 區(qū),再查看數(shù)據(jù),會會發(fā)現(xiàn) timestamp 比 datetime 多一小時

如果插入的是無效的呢?假如插入的是時間戳

結(jié)果是0000-00-00 00:00:00,根據(jù)官方的解釋是插入的是無效的話會轉(zhuǎn)為 0000-00-00 00:00:00,而時間戳并不是MySQL有效的時間格式。
那么什么形式的可以插入呢,下面列舉三種
//下面都是 MySQL 允許的形式,MySQL 會自動處理
2016-10-01 20:48:59
2016#10#01 20/48/59
20161001204859
3 選擇
如果在時間上要超過Linux時間的,或者服務(wù)器時區(qū)不一樣的就建議選擇 datetime。
如果是想要使用自動插入時間或者自動更新時間功能的,可以使用timestamp。
如果只是想表示年、日期、時間的還可以使用 year、 date、 time,它們分別占據(jù) 1、3、3 字節(jié),而datetime就是它們的集合。
到此這篇關(guān)于MySQL 中 datetime 和 timestamp 的區(qū)別與選擇的文章就介紹到這了,更多相關(guān)MySQL 中 datetime 和 timestamp 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql應(yīng)用安裝后找不到my.ini文件的解決過程
剛剛在修改mysql默認(rèn)配置的時候,發(fā)現(xiàn)找不到my.ini文件,下面這篇文章主要給大家介紹了關(guān)于Mysql應(yīng)用安裝后找不到my.ini文件的解決過程,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
用MySQL創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)庫表代碼
了解了一些最基本的操作命令后,我們再來學(xué)習(xí)如何創(chuàng)建一個數(shù)據(jù)庫和數(shù)據(jù)庫表。2008-10-10
MySQL中使用SHOW PROFILE命令分析性能的用法整理
這篇文章主要介紹了MySQL中使用show profile命令分析性能的用法整理,show profiles是數(shù)據(jù)庫性能優(yōu)化的常用命令,需要的朋友可以參考下2015-11-11

