數據庫類型字段總結

在這裏插入圖片描述

1.varchar 與 char 類型的區別

varchar優點

1)建立自己的站點時,varchar類型字段要比char類型字段方便的多,使用varchar時不需要爲使用過程中減掉多餘的空格而擔心;
2)使用varchar字段比char字段相比佔用更少的磁盤空間和內存,當數據庫很大時,這種操作會起到很重要的作用;
缺點:從整個系統的性能角度來看,char字段的處理速度會更快,有時甚至超出varchar速度的50%。
因此要設計數據庫的話得綜合考率各方面的因素,以求達到最佳的平衡。

2.1時間戳數據存取

在MySQL上述三個大版本中,默認時間戳(Timestamp)類型的取值範圍爲’1970-01-01 00:00:01’ UTC 至’2038-01-19 03:14:07’ UTC,數據精確到秒級別,該取值範圍包含約22億個數值,因此在MySQL內部使用4個字節INT類型來存放時間戳數據:

1、在存儲時間戳數據時,先將本地時區時間轉換爲UTC時區時間,再將UTC時區時間轉換爲INT格式的毫秒值(使用UNIX_TIMESTAMP函數),然後存放到數據庫中。

2、在讀取時間戳數據時,先將INT格式的毫秒值轉換爲UTC時區時間(使用FROM_UNIXTIME函數),然後再轉換爲本地時區時間,最後返回給客戶端。

在MySQL 5.6.4及之後版本,可以將時間戳類型數據最高精確微秒(百萬分之一秒),數據類型定義爲timestamp(N),N取值範圍爲0-6,默認爲0,如需要精確到毫秒則設置爲Timestamp(3),如需要精確到微秒則設置爲timestamp(6),數據精度提高的代價是其內部存儲空間的變大,但仍未改變時間戳類型的最小和最大取值範圍。
2.2時間戳字段定義主要影響兩類操作:

1、插入記錄時,時間戳字段包含DEFAULT CURRENT_TIMESTAMP,如插入記錄時未指定具體時間數據則將該時間戳字段值設置爲當前時間

2、更新記錄時,時間戳字段包含ON UPDATE CURRENT_TIMESTAMP,如更新記錄時未指定具體時間數據則將該時間戳字段值設置爲當前時間

CURRENT_TIMESTAMP表示使用CURRENT_TIMESTAMP()函數來獲取當前時間,類似於NOW()函數
2.3時間戳類型和時間類型選擇

  • 在部分"數據庫指導"文檔中,會推薦使用timestamp類型代替datetime字段,其理由是timestamp類型使用4字節,而datetime字段使用8字節,但隨着磁盤性能提升和內存成本降低,在實際生產環境中,使用timestamp類型並不會帶來太多性能提升,反而可能因timestamp類型的定義和取值範圍限制和影響業務使用。

    在MySQL5.6.4及之後版本,可以將時間戳類型(timestamp)數據最高精確微秒,也同樣可以將時間類型(datetime)數據最高精確微秒,時間類型(datetime)同樣可以獲得timestamp類型相同的效果,如將字段定義爲 dt1 DATETIME(3) NOT NULL DEFAULT NOW(3) ON UPDATE NOW(3);時間類型(datetime)的存取範圍’1000-01-01 00:00:00.000000’ 至 ‘9999-12-31 23:59:59.999999’,能更好地存放各時間段的數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章