摘要:中常用的兩種時(shí)間儲(chǔ)存類(lèi)型分別是和。下面就談?wù)勊麄兊膮^(qū)別和怎么選擇。時(shí)區(qū)只占個(gè)字節(jié),而且是以的格式儲(chǔ)存,它會(huì)自動(dòng)檢索當(dāng)前時(shí)區(qū)并進(jìn)行轉(zhuǎn)換。如果只是想表示年日期時(shí)間的還可以使用,它們分別占據(jù)字節(jié),而就是它們的集合。
MySQL 中常用的兩種時(shí)間儲(chǔ)存類(lèi)型分別是datetime和 timestamp。如何在它們之間選擇是建表時(shí)必要的考慮。下面就談?wù)勊麄兊膮^(qū)別和怎么選擇。
1 區(qū)別 1.1 占用空間類(lèi)型 | 占據(jù)字節(jié) | 表示形式 |
---|---|---|
datetime | 8 字節(jié) | yyyy-mm-dd hh:mm:ss |
timestamp | 4 字節(jié) | yyyy-mm-dd hh:mm:ss |
類(lèi)型 | 表示范圍 |
---|---|
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翻譯為漢語(yǔ)即"時(shí)間戳",它是當(dāng)前時(shí)間到 Unix元年(1970 年 1 月 1 日 0 時(shí) 0 分 0 秒)的秒數(shù)。對(duì)于某些時(shí)間的計(jì)算,如果是以 datetime 的形式會(huì)比較困難,假如我是 1994-1-20 06:06:06 出生,現(xiàn)在的時(shí)間是 2016-10-1 20:04:50 ,那么要計(jì)算我活了多少秒鐘用 datetime 還需要函數(shù)進(jìn)行轉(zhuǎn)換,但是 timestamp 直接相減就行。
1.3 時(shí)區(qū)timestamp 只占 4 個(gè)字節(jié),而且是以utc的格式儲(chǔ)存, 它會(huì)自動(dòng)檢索當(dāng)前時(shí)區(qū)并進(jìn)行轉(zhuǎn)換。
datetime以 8 個(gè)字節(jié)儲(chǔ)存,不會(huì)進(jìn)行時(shí)區(qū)的檢索.
也就是說(shuō),對(duì)于timestamp來(lái)說(shuō),如果儲(chǔ)存時(shí)的時(shí)區(qū)和檢索時(shí)的時(shí)區(qū)不一樣,那么拿出來(lái)的數(shù)據(jù)也不一樣。對(duì)于datetime來(lái)說(shuō),存什么拿到的就是什么。
還有一個(gè)區(qū)別就是如果存進(jìn)去的是NULL,timestamp會(huì)自動(dòng)儲(chǔ)存當(dāng)前時(shí)間,而 datetime會(huì)儲(chǔ)存 NULL。
2 測(cè)試我們新建一個(gè)表
插入數(shù)據(jù)
查看數(shù)據(jù),可以看到存進(jìn)去的是NULL,timestamp會(huì)自動(dòng)儲(chǔ)存當(dāng)前時(shí)間,而 datetime會(huì)儲(chǔ)存NULL
把時(shí)區(qū)修改為東 9 區(qū),再查看數(shù)據(jù),會(huì)會(huì)發(fā)現(xiàn) timestamp 比 datetime 多一小時(shí)
如果插入的是無(wú)效的呢?假如插入的是時(shí)間戳
結(jié)果是0000-00-00 00:00:00,根據(jù)官方的解釋是插入的是無(wú)效的話會(huì)轉(zhuǎn)為 0000-00-00 00:00:00,而時(shí)間戳并不是MySQL有效的時(shí)間格式。
那么什么形式的可以插入呢,下面列舉三種
//下面都是 MySQL 允許的形式,MySQL 會(huì)自動(dòng)處理 2016-10-01 20:48:59 2016#10#01 20/48/59 201610012048593 選擇
如果在時(shí)間上要超過(guò)Linux時(shí)間的,或者服務(wù)器時(shí)區(qū)不一樣的就建議選擇 datetime。
如果是想要使用自動(dòng)插入時(shí)間或者自動(dòng)更新時(shí)間功能的,可以使用timestamp。
如果只是想表示年、日期、時(shí)間的還可以使用 year、 date、 time,它們分別占據(jù) 1、3、3 字節(jié),而datetime就是它們的集合。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/17866.html
摘要:和數(shù)據(jù)類(lèi)型的用法在存儲(chǔ)字符串時(shí),可以使用或者類(lèi)型相同點(diǎn)和都可以存儲(chǔ)變長(zhǎng)字符串且字符串長(zhǎng)度上限為字節(jié)不同點(diǎn)速度快,不存在空間浪費(fèi),不處理尾部空格,上限為字節(jié),但是有存儲(chǔ)長(zhǎng)度實(shí)際字節(jié)最大可用。 點(diǎn)贊再看,養(yǎng)成贊美的習(xí)慣,微信搜一搜【香菜聊游戲】關(guān)注我。 目錄 1、DATETIME、TIME...
摘要:示例指定了也就是零時(shí)區(qū),顯示的時(shí)間會(huì)加上本地時(shí)區(qū)的偏移小時(shí)。其實(shí)就是上面顯示時(shí)間時(shí)使用的形式除了能表示基本信息,還可以表示星期,但是一點(diǎn)也不容易讀,不建議使用。 原文對(duì) ISO 8601 時(shí)間格式中 T 和 Z 的表述有一些錯(cuò)誤,我已經(jīng)對(duì)原文進(jìn)行了一些修訂,抱歉給大家造成誤解。 最近使用 sequelize 過(guò)程中發(fā)現(xiàn)一個(gè)奇怪的問(wèn)題,將某個(gè)時(shí)間插入到表中后,通過(guò) sequelize 查...
閱讀 2801·2021-11-17 09:33
閱讀 2178·2021-09-03 10:40
閱讀 544·2019-08-29 18:45
閱讀 2964·2019-08-29 16:21
閱讀 618·2019-08-29 11:11
閱讀 3399·2019-08-26 12:00
閱讀 2955·2019-08-23 18:19
閱讀 1097·2019-08-23 12:18