1. 程式人生 > >MySQL中date、year、datetime、timestamp和time資料型別的區別

MySQL中date、year、datetime、timestamp和time資料型別的區別

MySQL 日期型別:日期格式、所佔儲存空間、日期範圍 比較。
日期型別 儲存空間 日期格式 日期範圍

datetime 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
timestamp 4 bytes YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 ~ 2038
date 3 bytes YYYY-MM-DD 1000-01-01 ~ 9999-12-31
year 1 bytes YYYY 1901 ~ 2155

對照上面的表格,很容易就能選擇到合適自己的資料型別。不過到底是選擇 datetime 還是 timestamp,可能會有點犯難。這兩個日期時間型別各有優點:datetime 的日期範圍比較大;timestamp 所佔儲存空間比較小,只是 datetime 的一半。

兩者之間的比較:
1. timestamp容易所支援的範圍比timedate要小。 並且容易出現超出的情況
2.timestamp比較受時區timezone的影響以及MYSQL版本和伺服器的SQL MODE的影響.

MySQL 時間型別:時間格式、所佔儲存空間、時間範圍。
時間型別 儲存空間 時間格式 時間範圍

time 3 bytes HH:MM:SS -838:59:59 ~ 838:59:59

time 時間範圍居然有這麼大的範圍,特別是 time 可以取負值,有點奇怪。後來,看了 MySQL 手冊才知道這是為了滿足兩個日期時間相減才這樣設計的。

select timediff(‘2000:01:31 23:59:59’, ‘2000:01:01 00:00:00’); – 743:59:59
select timediff(‘2000:01:01 00:00:00’, ‘2000:01:31 23:59:59’); – -743:59:59
select timediff(‘23:59:59’, ‘12:00:00’); – 11:59:59

注意,timediff 的兩個引數只能是 datetime/timestamp, time 型別的,並且這兩個引數型別要相同。即:datetime/timestamp 和 datetime/timestamp 比較;time 和 time 相比較。

雖然 MySQL 中的日期時間型別比較豐富,但遺憾的是,目前(2008-08-08)這些日期時間型別只能支援到秒級別,不支援毫秒、微秒。也沒有產生毫秒的函式。