mysql 日期類型 比較


datetime 顯示為'YYYY-MM-DD HH:MM:SS'格式,范圍為'1000-01-01 00:00:00'到'9999-12-31 23:59:59'

date 顯示為'YYYY-MM-DD'格式,范圍為'1001-01-01'到'9999-12-31'

timestamp 范圍從'1970-01-01 00:00:01'UTC 到'2038-01-09 03:14:07'UTC

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 相同點:

顯示格式相同,TIMESTAMP列的顯示格式與DATETIME列相同。換句話說,顯示寬度固定在19字符,並且格式為YYYY-MM-DD HH:MM:SS。

datetime和timestamp不同點:

1)范圍

datetime 以'YYYY-MM-DD HH:MM:SS'格式檢索和顯示DATETIME值。支持的范圍為'1000-01-01 00:00:00'到'9999-12-31 23:59:59'TIMESTAMP值不能早於1970或晚於2037.

2)儲存

TIMESTAMP

1.4個字節儲存(Time stamp value is stored in 4 bytes)

2.值以UTC格式保存( it stores the number of milliseconds)

3.時區轉化 ,存儲時對當前的時區進行轉換,檢索時再轉換回當前的時區。

datetime

1.8個字節儲存(8 bytes storage)

2.實際格式儲存(Just stores what you have stored and retrieves the same thing which you have stored.)

3.與時區無關(It has nothing to deal with the TIMEZONE and Conversion.)

在一個表里面的timestamp字段只能有下面4種定義:

1). 是default current_timestamp

插入時系統自動賦值,插入時若在SQL 語句中指定該字段的值,則用SQL語句中的指定值。

修改時時間值不自動改變,但可以在SQL語句中指定其值。

2). 是on update current_timestamp

插入時系統不自動賦值(字段為“零”值),但可以在SQL語句中指定該字段的值。

修改時,系統自動賦值,但若SQL語句中指定其值,則用SQL語句中的指定值。

3).兩個都有default current_timestamp on update current_timestamp

如果timestamp后面啥都不寫,也相當於2個都有。

插入修改時系統自動賦值,SQL語句中若指定,則用SQL語句中的指定值。

4).如果default 后面寫個常數,如default 20090101010000,那么插入時即為這個值。其他與上面類似。

另外,一個表里面,如果想定義第2個timestamp字段,而且想讓第2個字段有系統自動修改的機制,那么之前的那個字段一定要賦予default 常數(即上面第4點),然后,再給這個新的timestamp字段進行如上abc的定義,區別是這個新的timestamp字段不能后面啥不都寫,如果啥都不寫,那么插入和修改時系統不會自動賦值。依次類推,再想定義第3個timestamp字段,而且想讓第3個字段有系統自動修改的機制,那么之前第2個timestamp字段一定要賦予default 常數(即上面第4點),然后,再給這個新的timestamp字段進行如上abc的定義,區別跟前面一樣。

上述current_timestamp還可以用它的同義詞 current_timestamp(),now(),localtime,localtime(),localtimestamp,localtimestamp() 代替。

timestamp字段缺省不允許空值,如果指定它的值為null,實際上就是用當前時間值賦給他了。

但是,可以這樣定義:

col1 timestamp null default null, 注釋:該字段可以為null,插入時缺省就是null,如果賦值null,那也真是null而不是當前時間值。

col2 timestamp null default 0, 注釋:該字段可以null,插入時缺省為0,如果賦值null,那也真是null而不是當前時間值。

如果MySQL服務器以MAXDB SQL模式運行,那么timestamp等同於datetime類型,前面說的timestamp類型的所有描述都消失。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM