熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> MySQL >> 正文

高性能MySQL:日期和時間類型

2013-11-23 21:09:22  來源: MySQL 

   日期和時間類型

  MySQL 可以使用許多類型來保存日期和時間值例如YEAR 和DATEMySQL 能存儲的最小時間粒度為秒(MariaDB 支持微秒級別的時間類型)但是MySQL 也可以使用微秒級的粒度進行臨時運算我們會展示怎麼繞開這種存儲限制

  大部分時間類型都沒有替代品因此沒有什麼是最佳選擇的問題唯一的問題是保存日期和時間的時候需要做什麼MySQL 提供兩種相似的日期類型DATETIME 和TIMESTAMP對於很多應用程序它們都能工作但是在某些場景一個比另一個工作得好讓我們來看一下

  DATETIME

  這個類型能保存大范圍的值 年到精度為秒它把日期和時間封裝到格式為YYYYMMDDHHMMSS 的整數中與時區無關使用 個字節的存儲空間

  默認情況下MySQL 以一種可排序的無歧義的格式顯示DATETIME 值例如 ::這是ANSI 標准定義的日期和時間表示方法

  TIMESTAMP

  就像它的名字一樣TIMETAMP 類型保存了從 日午夜(格林尼治標准時間)以來的秒數它和UNIX 時間戳相同TIMESTAMP 只使用 個字節的存儲空間因此它的范圍比DATETIME 小得多只能表示從 年到MySQL 提供了FROM_UNIXTIME() 函數把Unix 時間戳轉換為日期並提供了UNIX_TIMESTAMP() 函數把日期轉換為Unix 時間戳

  MySQL 以及更新的版本按照DATETIME 的方式格式化TIMESTAMP 的值但是MySQL 以及更老的版本不會在各個部分之間顯示任何標點符號這僅僅是顯示格式上的區別TIMESTAMP 的存儲格式在各個版本都是一樣的

  TIMESTAMP 顯示的值也依賴於時區MySQL 服務器操作系統以及客戶端連接都有時區設置

  因此存儲值為 的TIMESTAMP 在美國東部時區顯示為 ::與格林尼治時間差 個小時有必要強調一下這個區別如果在多個時區存儲或訪問數據TIMESTAMP 和DATETIME 的行為將很不一樣前者提供的值與時區有關系後者則保留文本表示的日期和時間

  TIMESTAMP 也有DATETIME 沒有的特殊屬性默認情況下如果插入時沒有指定第一個TIMESTAMP 列的值MySQL 則設置這個列的值為當前時間注在插入一行記錄時MySQL 默認也會更新第一個TIMESTAMP 列的值(除非在UPDATE 語句中明確指定了值)你可以配置任何TIMESTAMP 列的插入和更新行為最後TIMESTAMP 列默認為NOT NULL這也和其他的數據類型不一樣

  除了特殊行為之外通常也應該盡量使用TIMESTAMP因為它比DATETIME 空間效率更高有時候人們會將Unix 時間截存儲為整數值但這不會帶來任何收益用整數保存時間截的格式通常不方便處理所以我們不推薦這樣做

  如果需要存儲比秒更小粒度的日期和時間值怎麼辦? MySQL 目前沒有提供合適的數據類型但是可以使用自己的存儲格式可以使用BIGINT 類型存儲微秒級別的時間截或者使用DOUBLE 存儲秒之後的小數部分這兩種方式都可以或者也可以使用MariaDB替代MySQL

      返回目錄高性能MySQL

       編輯推薦

       ASPNET MVC 框架揭秘

       Oracle索引技術

       ASP NET開發培訓視頻教程

  數據倉庫與數據挖掘培訓視頻教程


From:http://tw.wingwit.com/Article/program/MySQL/201311/29684.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.