MySQL 日期與時間類型

參考鏈接:

https://www.cnblogs.com/wlzjdm/p/6953398.html

https://www.cnblogs.com/alterem/p/12001817.html

日期類型

MySql 中關於日期的類型有 Date / Datetime / Timestamp 三種類型。

日期賦值時,允許“不嚴格”語法:任何標點符都可以用做日期部分或時間部分之間的間割符。

例如,‘98-12-31 11:30:45’、‘98.12.31 11+30+45’、‘98/12/31 11*30*45’ 和 ‘98@12@31 113045’ 都是等價 的,對於不合法的日期將會轉換爲:0000-00-00 00:00:00。

Date

存儲數據格式爲:YYYY-MM-DD,範圍爲 ‘1000-01-01’ 到 ‘9999-12-31’,並且允許使用字符串或數字賦值。

update t set t_date = 12331212 where t_name = 'name';
update t set t_date = '1233-12-12' where t_name = 'name';

Datetime

日期和時間的組合,存儲格式爲:YYYY-MM-DD HH:MM:SS

範圍爲 ‘1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’,並且允許使用字符串或數字賦值。

update t set t_date = 12331212121212 where t_name = 'name';
update t set t_date = '1233-12-12 12:12:12' where t_name = 'name';

TimeStamp

時間戳,從 1970-01-01 00:00:00 到當前的時間差值,它精確到毫秒級別,範圍爲:‘1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’。設置值時只允許設置數字類型的值。

在爲 TimeStamp 類型字段賦值的時候,值必須大於19700101000000,否則就會拋出錯誤。

TIMESTAMP 列必須有默認值,默認值可以爲“0000-00-00 00:00:00”,但不能爲 null。

update t set t_date = 20081212121212 where t_name = 'name';

注意:

  • 當在 Java 中輸出 new Date(0) 的時候,輸出的是:Thu Jan 01 08:00:00 CST 1970,這是因爲時區的概念,中國是東八區,對應的是早上八點。
  • TIMESTAMP 和時區相關,更能反映當前時間。當插入日期時,會先轉換爲本地時區後再存放;當查詢日期時,會將日期轉換爲本地時區後再顯示。所以不同時區的人看到的同一時間是不一樣的。

  • TIMESTAMP 的屬性受 Mysql 版本和服務器 SQLMode 的影響較大。

    如果記錄的日期需要讓不同時區的人使用,最好使用 TIMESTAMP。

    一般建表時候,創建時間用datetime,更新時間用 TIMESTAMP。

時間類型

MySQL 中時間類型用 Time 表示。

Time

存儲格式爲 ‘HH:MM:SS’。範圍可以從’-838:59:59’到’838:59:59’。小時部分會因此大的原因是 Time 類型不僅可以用於表示一天的時間(必須小於24小時),還可以用於表示某個事件過去的時間或兩個事件之間的時間間隔,所以可以大於24小時,甚至爲負。

格式說明:

  • ‘HHMMSS’格式的沒有間割符的字符串,假定是有意義的時間。例如,‘101112’被理解爲’10:11:12’,但’109712’是不合法的(它有一個沒有意義的分鐘部分),將變爲’00:00:00’。
  • 超出TIME範圍但合法的值被裁爲範圍最接近的端點。例如,’-850:00:00’和’850:00:00’被轉換爲’-838:59:59’和’838:59:59’。

年類型

MySQL 中用 Year 表示年類型。

Year

存儲格式爲 YYYY。範圍是 1901 到 2155。

可以指定各種格式的 Year 值:

  • 四位字符串,範圍爲’1901’到’2155’。
  • 四位數字,範圍爲 1901 到 2155。
  • 兩位字符串,範圍爲’00’到’99’。'00’到’69’和’70’到’99’範圍的值被轉換爲 2000 到 2069 和 1970 到 1999 範圍的 Year 值。
  • 兩位整數,範圍爲 1 到 99。1到69和70到99範圍的值被轉換爲2001到2069和1970到1999範圍的 Year 值。注意兩位整數範圍與兩位字符串範圍稍有不同,因爲你不能直接將零指定爲數字並將它解釋爲 2000。你必須將它指定爲一個字符串’0’或’00’或者它被解釋爲0000。
  • 非法YEAR值被轉換爲0000。

日期兼容性問題

  1. MySQL 服務器採用了 Unix 的時間功能,對於 TIMESTAMP 值,可處理的日期至 2037 年。對於 DATE 和 DATETIME 值,可接受的日期可至 9999 年。
  2. 所有的 MySQL 日期函數均是在 1 個源文件:sql/time.cc中實現的,並經過了恰當編碼以確保 2000 年安全。
  3. 在 MySQL 3.22 和以後的版本中,YEAR 列類型能夠在1個字節內保存 0 年以及1901~2155年,並能使用兩位或四位數字顯示它們。所有的兩位數字年份均被視爲介於1970~2069年之間,這意味着,如果你在 YEAR 列中保存了01,MySQL 服務器會將其當作 2001 年。

5 種類型對比

日期時間類型 佔用空間 日期格式 最小值 最大值 零值表示
DATETIME 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 9999-12-31 23:59:59 0000-00-00 00:00:00
TIMESTAMP 4 bytes YYYY-MM-DD HH:MM:SS 19700101080001 2038 年的某個時刻 00000000000000
DATE 4 bytes YYYY-MM-DD 1000-01-01 9999-12-31 0000-00-00
TIME 3 bytes HH:MM:SS -838:59:59 838:59:59 00:00:00
YEAR 1 bytes YYYY 1901 2155 0000
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章