Schema的最佳化和索引

來源:互聯網
上載者:User

日期和時間類型

MySQL對於不同種類的日期和時間有很多的資料類型,比如YEAR和DATE。MySQL可儲存時間顆粒度是一秒。然而,時間的計算可以精確到毫秒。我們將會教你如何解決儲存引擎的局限性。

大部分時間類型都沒有什麼可選擇的。所以那個是最佳的選擇不是一個問題。只有一個問題那就是當你即要儲存日期也要儲存時間的時候,將要做什麼。MySQL提供了兩個類型來滿足這個需求:DATETIME和TIMESTAMP.對許多應用而言,任意一個都可以,但是在一些案例中,一個要好於另一個。讓我們來看看:

DATETIME

這個類型可以儲存大範圍的值。從1001到9999.精度精確到了秒。它儲存日期和時間壓縮到為YYYYMMDDHHMMSS格式的整型,獨立的時間地區。這會佔用8位元組的儲存空間。

預設的MySQL顯示DATETIME為排序的,清晰地格式,比如2008-01-16 22:37:08。這是符合ANSI標準的日期和時間。

TIMESTAMP

就像名字所提示的一樣,TIMESTAMP類型儲存了從1970 1.1 開始所經過秒的數量-這個UNIX的TIMESTAMP是一樣的。因此它的範圍要比DATATIME要小一些:從1970年到2038年。MySQL提供了FROM_UNIXTIME和UNIX_TIMESTAMP函數,用來把Unix的timestamp轉為data,反之亦然。

新版的MySQL的TIMESTAMP值像DATETIME.但是舊版MySQL顯示它們沒有任何的標點。僅僅是顯示格式的不同。TIMESTAMP儲存在MySQL的方式在所有MySQL版本中都是一樣的。

TIMSTAMP的現實也依賴於時區。MySQL伺服器,作業系統,用戶端串連所有的都有時區的設定。因此,一個TIMESTAMP存值為0,實際顯示的是東部夏令時間,1969-12-31 19:00:00。相對GMT有5個時差。

TIMESTAMP也有一個DATETIME不具備的屬性。預設的情況下,當你插入一條記錄並沒有指定這個值,MySQL會把TIMESTAMP列設為當前的時間。當你更新這一行的時候,MySQL也會更新TIMESTAMP列。除非你給TIMESTAMP指定一個值。對於任意的TIMESTAMP,你可以配置插入和更新的行為。最終,TIMESTAMP列預設不能為NULL.這點和其他的類型有所不同。

先撇特殊行為不談,一般來說,如果能用TIMESTAMP就應該用,因為它空間上比DATETIME更有效用。有的時候人們用整型來儲存UNIX的TIMESTAMP,但是這麼做不能帶來什麼好處。這麼做也不太容易去處理,我們不建議這麼做。

怎樣儲存比秒更精確的時間?MySQL還沒有這些資料類型,但你可以使用你自己的儲存類型:你可以使用BIGINT類型並且儲存這個值作為在微妙層級的TIMESTAMP,或者你可以使用DOUBLE並且儲存小數點之後的秒的小數部分。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.