其次,TIMESTAMP類(lèi)型在默認(rèn)情況下,insert、update 數(shù)據(jù)時(shí),TIMESTAMP列會(huì)自動(dòng)以當(dāng)前時(shí)間(CURRENT_TIMESTAMP)填充/更新。 第三,TIMESTAMP比較受時(shí)區(qū)timezone的影響以及MYSQL版本和服務(wù)器的SQL MODE的影響 所以一般來(lái)說(shuō),我比較傾向選擇DATETIME,至于你說(shuō)到索引的問(wèn)題,選擇DATETIME作為索引,如果碰到大量數(shù)據(jù)查詢(xún)慢的情況,也可以分區(qū)表解決。
創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括遼中網(wǎng)站建設(shè)、遼中網(wǎng)站制作、遼中網(wǎng)頁(yè)制作以及遼中網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,遼中網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到遼中省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!
儲(chǔ)存時(shí)間,常用的有三個(gè)選擇datetime、timestamp、int。昨夜同事問(wèn)到了,于是今天就總結(jié)一下自己的理解。插入效率:datetime timestamp int讀取效率:int timestamp datetime儲(chǔ)存空間:datetime timestamp = int具體上面的實(shí)驗(yàn)數(shù)據(jù)可以看這篇文章。
建立索引的體積,和索引的速度,你懂的。
讓我們來(lái)看一個(gè)應(yīng)用場(chǎng)景:
看下這張圖,第一我們需要設(shè)置系統(tǒng)的默認(rèn)時(shí)區(qū),第二我們也需要提供不同時(shí)區(qū)時(shí)間顯示的需要。于是,我們分別使用datetime、timestamp、int字段類(lèi)型來(lái)看下:使用datetime直接顯示時(shí)間,這是個(gè)不錯(cuò)的選擇,但是如果考慮到時(shí)區(qū),很明顯計(jì)算上的麻煩。使用timestampOK,這個(gè)很好,可以根據(jù)系統(tǒng)的時(shí)區(qū)來(lái)自動(dòng)輸出時(shí)間,但是單個(gè)用戶(hù)要定制自己的時(shí)區(qū)呢?再者你不怕麻煩,在程序里面實(shí)現(xiàn)了這個(gè)計(jì)算,服務(wù)器若是換個(gè)地方,改了下時(shí)區(qū),你程序里面計(jì)算單個(gè)用戶(hù)當(dāng)?shù)貢r(shí)間的代碼怎么辦(timestamp出來(lái)的時(shí)間會(huì)根據(jù)時(shí)區(qū)的變化而變化,在某些情況下是不錯(cuò)的選擇,但在某些情況下,真的很雞肋)。使用int從上面兩個(gè)類(lèi)型的缺點(diǎn)看來(lái),貌似這個(gè)類(lèi)型可以解決以上的問(wèn)題,其實(shí)我們只要存格林時(shí)間的unix timestamp就好了,時(shí)區(qū)時(shí)間的計(jì)算上也很方便,讀取的效率也不錯(cuò)。我覺(jué)得用這個(gè)儲(chǔ)存的缺點(diǎn)呢,就是直接select的時(shí)候時(shí)間不能直觀的顯示出來(lái)。看看其他開(kāi)源程序是怎么做的discuz, typecho, emlog等等等等,他們都選用int了,這一定有他們的道理,我想也沒(méi)什么可以多說(shuō)的了。
MySQL日期與時(shí)間數(shù)據(jù)類(lèi)型的區(qū)別請(qǐng)看下表:
每種日期和時(shí)間類(lèi)型都有一個(gè)有效范圍。如果插入的值超出相應(yīng)范圍,系統(tǒng)會(huì)報(bào)錯(cuò)并將相應(yīng)的零值插入到數(shù)據(jù)庫(kù)中,各個(gè)類(lèi)型的零值請(qǐng)看上表。
YEAR類(lèi)型用4位數(shù)表示年份。范圍從1901~2155,插入超范圍的值時(shí)系統(tǒng)報(bào)錯(cuò)并插入0000。
DATE類(lèi)型用YYYY-MM-DD形式顯示日期。范圍從1000-01-01~9999-12-31插入超范圍的值時(shí)系統(tǒng)報(bào)錯(cuò)并插入零值。此類(lèi)型除了可接受YYYY-MM-DD和YYYYMMDD格式的輸入外,還可以識(shí)別其它一些不嚴(yán)格的語(yǔ)法格式,例如YYYY/MM/DD、YYYY.MM.DD等其他標(biāo)點(diǎn)符號(hào)作為間隔的形式日期值的輸入。
TIME類(lèi)型用HH:MM:SS形式顯示時(shí)間。其中MM和SS的取值范圍是0~59,HH的取值范圍比較特別其取值范圍是0~838,一般來(lái)講小時(shí)數(shù)的范圍是0~23,但是為了滿(mǎn)足特殊情況的需要,MySQL擴(kuò)大了TIME類(lèi)型的范圍,而且可以接受負(fù)數(shù)。TIME類(lèi)型支持D HH:MM:S格式的時(shí)間表達(dá)字串,D表示天數(shù),取值范圍0~34。例如,輸入30 21:15:26,系統(tǒng)會(huì)將小時(shí)部分按30*24+21轉(zhuǎn)換為?741:15:26。除了標(biāo)準(zhǔn)的輸入方式HH:MM:SS外,此類(lèi)型還可以接受一些非標(biāo)準(zhǔn)的輸入方式,例如,輸入12,系統(tǒng)會(huì)轉(zhuǎn)換為00:00:12、輸入1212,系統(tǒng)會(huì)轉(zhuǎn)換為
00:12:12、輸入121212,系統(tǒng)會(huì)轉(zhuǎn)換為12:12:12等。
DATETIME類(lèi)型用YYYY-MM-SS HH:MM:SS形式顯示日期與時(shí)間。范圍從1000-01-01 00:00:00~9999-12-31 23:59:59?插入超范圍的值時(shí),系統(tǒng)報(bào)錯(cuò)并插入零值(0000-00-00 00:00:00)。此類(lèi)型除了可接受YYYY-MM-SS HH:MM:SS格式的輸入外,還可以識(shí)別YYYYMMSSHHMMSS形式的輸入值。例如,輸入20170117174856,系統(tǒng)會(huì)轉(zhuǎn)換為
2017-01-17 17:48:56。
TIMESTAMP類(lèi)型情況與DATETIME類(lèi)型接近,但是它的取值范圍要比DATETIME類(lèi)型窄很多,范圍從19700101080001~20380119111407(1970-01-01 08:00:01~2038-01-19 11:14:07)。**另外,TIMESTAMP類(lèi)型還有一個(gè)特別之處,那就是它的值的時(shí)間部分是根據(jù)時(shí)區(qū)來(lái)顯示的,例如在東八區(qū)插入的TIMESTAMP類(lèi)型值2017-01-16 18:04:25,在東七區(qū)的時(shí)間部分會(huì)顯示17:04:25,而在東九區(qū)則變?yōu)?9:04:25,對(duì)于這一點(diǎn)我們要特別留意。**
我們?cè)谶x擇日期與時(shí)間數(shù)據(jù)類(lèi)型時(shí),請(qǐng)根據(jù)實(shí)際需求選擇相應(yīng)的類(lèi)型,一般應(yīng)選擇剛好夠用最好,這樣可節(jié)省系統(tǒng)資源。例如只需要知道日期的選擇DATE類(lèi)型、需要同時(shí)知道日期與時(shí)間的就選擇DATETIME類(lèi)型、僅僅需要記錄時(shí)間的則選擇TIME類(lèi)型等。
mysql(5.5)所支持的日期時(shí)間類(lèi)型有:DATETIME、?TIMESTAMP、DATE、TIME、YEAR。
1.DATETIME 用于表示 年月日 時(shí)分秒,是 DATE 和 TIME 的組合,并且記錄的年份比較長(zhǎng)久。如果實(shí)際應(yīng)用中有這樣的需求,就可以使用 DATETIME 類(lèi)型。
2.TIMESTAMP
TIMESTAMP 用于表示 年月日 時(shí)分秒,但是記錄的年份比較短暫。
TIMESTAMP 和時(shí)區(qū)相關(guān),更能反映當(dāng)前時(shí)間。當(dāng)插入日期時(shí),會(huì)先轉(zhuǎn)換為本地時(shí)區(qū)后再存放;當(dāng)查詢(xún)?nèi)掌跁r(shí),會(huì)將日期轉(zhuǎn)換為本地時(shí)區(qū)后再顯示。所以不同時(shí)區(qū)的人看到的同一時(shí)間是? 不一樣的。
表中的第一個(gè)?TIMESTAMP?列自動(dòng)設(shè)置為系統(tǒng)時(shí)間(CURRENT_TIMESTAMP)。當(dāng)插入或更新一行,但沒(méi)有明確給 TIMESTAMP 列賦值,也會(huì)自動(dòng)設(shè)置為當(dāng)前系統(tǒng)時(shí)間。如果表中有第二個(gè) TIMESTAMP 列,則默認(rèn)值設(shè)置為0000-00-00 00:00:00。
TIMESTAMP 的屬性受 Mysql 版本和服務(wù)器 SQLMode 的影響較大。
如果記錄的日期需要讓不同時(shí)區(qū)的人使用,最好使用 TIMESTAMP。
3.DATE
DATE 用于表示 年月日,如果實(shí)際應(yīng)用值需要保存 年月日 就可以使用 DATE。
4.TIME
TIME 用于表示 時(shí)分秒,如果實(shí)際應(yīng)用值需要保存 時(shí)分秒 就可以使用 TIME。
5.YEAR
YEAR 用于表示 年份,YEAR 有 2 位(最好使用4位)和 4 位格式的年。 默認(rèn)是4位。如果實(shí)際應(yīng)用只保存年份,那么用 1 bytes 保存 YEAR 類(lèi)型完全可以。不但能夠節(jié)約存儲(chǔ)空間,還能提高表的操作效率。
資料拓展:
每種日期時(shí)間類(lèi)型都有一個(gè)有效值范圍,如果超出這個(gè)范圍,在默認(rèn)的SQLMode下會(huì)報(bào)錯(cuò),并以零值存儲(chǔ)。
插入或更新時(shí),日期時(shí)間類(lèi)型允許“不嚴(yán)格”語(yǔ)法,以DATETIME為例(其他日期時(shí)間類(lèi)型雷同):
YYYY-MM-DD HH:MM:SS?或?YY-MM-DD HH:MM:SS 格式的字符串。任何符號(hào)都可以用作日期部分或時(shí)間部分的間隔符。例如:“14-06-18 14:54:10”、“14*06*18 14.54.10”、“14+06+18 14=54=10”是等價(jià)的。對(duì)于包含日期時(shí)間的字符串值,如果月、日、時(shí)、分、秒的值小于10,不需要指定兩位數(shù)。例如:“2014-2-3 2:3:6”、“2014-02-03 02:03:06”是等價(jià)的。
YYYYMMDDHHMMSS 或?YYMMDDHHMMSS 格式的字符串。如果字符串對(duì)于日期時(shí)間類(lèi)型是合法的就可以解釋為日期時(shí)間類(lèi)型。例如:“20140618145410” 和 “140618145410”將被解釋為 “2014-06-18 14:54:10” ,但是?“20140618145480” 是不合法的(秒數(shù)不合法),將被解釋為 “0000-00-00 00:00:00”。
YYYYMMDDHHMMSS 或?YYMMDDHHMMSS 格式的數(shù)字。如果該數(shù)字對(duì)日期時(shí)間類(lèi)型是合法的就可以解釋為日期時(shí)間類(lèi)型。例如:“20140618145410” 和 “140618145410” 將被解釋為 “2014-06-18 14:54:10” 。數(shù)值的長(zhǎng)度應(yīng)為6、8、12、14。如果數(shù)值長(zhǎng)度是 8 或 14 位長(zhǎng),則假定為 YYYYMMDD 或?YYYYMMDDHHMMSS?格式。如果數(shù)值為 6 或 12 位長(zhǎng),則假定為 YYMMDD 或?YYMMDDHHMMSS?格式。
mysql時(shí)間字段用:Date、Datetime和Timestamp。
(1)“Date”數(shù)據(jù)類(lèi)型:用于存儲(chǔ)沒(méi)有時(shí)間的日期。 Mysql獲取并顯示此類(lèi)型的格式為“ YYYY-MM-DD”,支持的時(shí)間長(zhǎng)度范圍是“ 1000-00-00”至“ 9999-12-31”。
(2)“Datetime”類(lèi)型:存儲(chǔ)日期和時(shí)間的數(shù)據(jù)。 存儲(chǔ)和顯示格式為“ YYYY-MM-DD HH:MM:SS”, 支持的時(shí)間長(zhǎng)度范圍是“ 1000-00-00 00:00:00”到“ 9999-12-31 23:59:59”。
(3)“Timestamp”類(lèi)型:存儲(chǔ)日期和時(shí)間的數(shù)據(jù)。 存儲(chǔ)和顯示格式與日期時(shí)間相同。 支持的時(shí)間長(zhǎng)度范圍是“ 1970-01-01 00:00:01”至“ 2038-01-19 03:14:07”。
所有不符合上述格式的數(shù)據(jù)都將轉(zhuǎn)換為0值的相應(yīng)類(lèi)型。
擴(kuò)展資料:
MySQL主要分為三種類(lèi)型:字符串,日期和數(shù)字(每種類(lèi)型實(shí)際上都有一個(gè)二進(jìn)制類(lèi)型,但并不常用)。
*字符串分為定長(zhǎng)char和不定長(zhǎng)度varchar,char以聲明的長(zhǎng)度為準(zhǔn),而varchar的長(zhǎng)度與值的長(zhǎng)度和字符集有關(guān)。
*數(shù)字和日期均為固定長(zhǎng)度的字段。 不同的類(lèi)型具有不同的長(zhǎng)度。 例如,Datetime是5.6.4之后的5個(gè)字節(jié),之前的是8個(gè)字節(jié); timestamp是4個(gè)字節(jié),因?yàn)槠浯鎯?chǔ)整數(shù),小數(shù)部分的長(zhǎng)度通常與位數(shù)有關(guān)。
select curDate(); #獲取當(dāng)前日期select curTime(); #獲取當(dāng)前時(shí)間select now(); #獲取當(dāng)前日期+時(shí)間
列舉1個(gè)天數(shù)加減的例子,其他的看英文意思就可以理解了
select date_add(now(), interval 1 day); #當(dāng)前日期天數(shù)+1
select date_add(now(), interval -1 day); #當(dāng)前日期天數(shù)-1
select date_add(now(), interval 1 hour);
select date_add(now(), interval 1 minute);
select date_add(now(), interval 1 second);
select date_add(now(), interval 1 microsecond);
select date_add(now(), interval 1 week);
select date_add(now(), interval 1 month);
select date_add(now(), interval 1 quarter);
select date_add(now(), interval 1 year);
date_sub與date_add功能整合相反
select
date_sub(now(), interval 1 day); #當(dāng)前日期天數(shù)-select date_sub(now(),
interval -1 day); #當(dāng)前日期天數(shù)+select date_sub(now(), interval 1
hour); select date_sub(now(), interval 1 minute)select date_sub(now(),
interval 1 second)select date_sub(now(), interval 1 microsecond)select
date_sub(now(), interval 1 week)select date_sub(now(), interval 1
month)select date_sub(now(), interval 1 quarter)select date_sub(now(),
interval 1 year);
datediff函數(shù)計(jì)算兩個(gè)日期間隔的天數(shù)
datediff(date1, date2); #date1 - date2
timediff函數(shù)計(jì)算兩個(gè)時(shí)間間隔
timediff(time1, time2); #time1 - time2
time1和time2的格式必須要一樣,返回時(shí)間差
str_to_date(str, format) 字符串轉(zhuǎn)換為日期
select str_to_date('11/09/2014', '%m/%d/%Y'); -- 2014-11-09
分享名稱(chēng):mysql日期時(shí)間怎么選 mysql日期和時(shí)間函數(shù)
URL鏈接:http://chinadenli.net/article12/doddgdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、虛擬主機(jī)、用戶(hù)體驗(yàn)、云服務(wù)器、網(wǎng)站收錄、全網(wǎng)營(yíng)銷(xiāo)推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)