您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關MySQL中怎么選擇時間類型存儲格式,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
int型:
存儲長度: 4字節
表示范圍: date('Y-m-d H:i:s', 4294967295) 最大到 2106-02-07 14:28:15 ,如果一個企業活過這么久,就需要數據庫考慮 bigint 或者datetime類型了。
是否為空: 可以為空,但是業務邏輯設計建議設置非空
存儲格式: 數值類型存儲,節省空間
時區相關: 與時區無關
默認值 : 可以根據業務邏輯設置默認值為某個時間。
優點
1 類型簡單,cpu處理該字段的運算會比較快,占用字節小,節省空間。
2 查詢速度快。
datetime:
存儲長度: 8字節
表示范圍:'1000-01-01 00:00:00'-'9999-12-31 23:59:59'
是否為空: 允許為空值,可以自定義值,且insert和update操作不會自動修改其值。
儲存格式: 以實際格式存儲(Just stores what you have stored and retrieves the same thing which you have stored.)
時區相關: 與時區無關
默認值 : 不指定默認值的時候 MySQL會初始化為'0000-00-00 00:00:00'
mysql> CREATE TABLE `tm` (
-> `d1` int(10) unsigned NOT NULL default '0',
-> `d2` timestamp NOT NULL default CURRENT_TIMESTAMP,
-> `d3` datetime NOT NULL,
-> `d4` timestamp NOT NULL default CURRENT_TIMESTAMP on update current_timestamp
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> insert into tm(d1,d4) values(1458612980,now());
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> select * from tm;
+------------+---------------------+---------------------+---------------------+
| d1 | d2 | d3 | d4 |
+------------+---------------------+---------------------+---------------------+
| 1458612980 | 2016-03-22 10:16:20 | 2016-03-22 15:21:21 | 2016-03-22 10:16:20 |
| 1458612980 | 2016-03-22 15:22:17 | 0000-00-00 00:00:00 | 2016-03-22 15:22:17 |
+------------+---------------------+---------------------+---------------------+
2 rows in set (0.00 sec)
優點 顯示直觀,不需使用函數做轉換
timestamp:
存儲長度: 4字節
是否為空: 允許為空值,但是不可以自定義值,所以為空值時沒有任何意義。
表示范圍:'1970-01-01 00:00:01'-'2038-01-19 03:14:07
是否為空: 允許為空值,可以自定義值,且insert和update操作不會自動修改其值。
存儲格式: 值以UTC格式保存,即以毫秒為單位的數字存儲 ( it stores the number of milliseconds)
時區相關: 和時間相關,時區轉化 ,存儲時對當前的時區進行轉換,檢索時再轉換回當前的時區。
默認值 : 可以設置為CURRENT_TIMESTAMP(),當前的系統時間。
gmt_modified timestamp not null default '0000-00-00 00:00:00' on update current_timestamp
字段屬性加上 "on update current_timestamp",
1 在更新記錄時不指定update timestamp字段的值,數據庫會自動修改gmt_modified的值為當前系統的時間,
2 在插入記錄時不指定timestamp字段和timestamp字段的值,插入后該字段的值會自動變為當前系統時間。
相比于 init 類型的 可以自動更新為系統當前時間,其他并無優勢。
三 總結
對于如何選型 ,有如下三種層面 性能,存儲空間,時間范圍 的考慮。這里我從時間范圍和存儲空間層面推薦使用 int 或者bigint ,datetime 類型。bigint和datetime 占用的空間一樣,唯一的差異是在性能上可能存在差異。當然如果你服務的企業有存在 102年的夢想,那我建議直接使用 datetime類型。2038年的時候,雖然我們(80后)估計已經在家養老或者身居高層,為了避免給后來的運維人員留坑,建議不要使用 timestamp 字段。
以上就是MySQL中怎么選擇時間類型存儲格式,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。