MySQL整數/日期/時間類型說明 MySQL 整數類型:所占存儲空間、整數范圍比較。 MySQL 日期類型:日期格式、所占存儲空間、日期范圍 比較。 MySQL 時間類型:時間格式、所占存儲空間、時間范圍。 一,mysql整數類型: TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT。分別使用8,16,24,32,64位存儲空間。 MySQL 整數類型:所占存儲空間、整數范圍比較。 整數類型 存儲空間 無符號整數范圍 有符號整數范圍
------------ --------- ------------------------ ----------------------------------------- tinyint 8 bits 0 ~ 255 -128 ~ 127 smallint 16 bits 0 ~ 65535 -32768 ~ 32767 mediumint 24 bits 0 ~ 16777216 -8388608 ~ 8388607 int 32 bits 0 ~ 4294967295 -2147483648 ~ 2147483647 bigint 64 bits 0 ~ 18446744073709551615 -9223372036854775808 ~ 9223372036854775807
存儲的值的范圍為-2(N-1)到2(N-1)-1,無符號存儲范圍0到2N-1。 mysql可以為整數類型指定寬度,例如int(11),對大多數應用來說這是無意義的:它不會限制值的合法范圍,只是規定mysql的一些交互工具(例如mysql命令行客戶端)用來顯示字符的個數。對於存儲和計算來說,int(1)和int(20)是相同的。 二,mysql日期類型: 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
timestamp 類型的列還有個特性:默認情況下,在 insert, update 數據時,timestamp 列會自動以當前時間(CURRENT_TIMESTAMP)填充/更新。“自動”的意思就是,你不去管它,MySQL 會替你去處理。 timestamp顯示的值依賴於時區,mysql服務器,操作系統,以及客戶端連接都有時區設置。datetime顯示的值與時區無關系,保留文本表示的日期和時間。 三,mysql時間類型: 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)這些日期時間類型只能支持到秒級別,不支持毫秒、微秒。也沒有產生毫秒的函數。