mysql中的日期和時間

服務器數據庫5.5,本地5.7在講遠程服務器導入到本地操做的時候,一直在date上報invalid value,最後定位在這樣的語句上created_at date no null default '0000-00-00 00:00:00',這裏涉及到兩個問題:mysql

  1. date日期的格式
  2. 服務器sql-model 正是由於5.7版本對安全方面增強了不少,因此默認的sql-model中有NO_ZERO_DATE,因此致使在插入和設置時,不符合或無效的值不會自動轉爲'0', 不一樣的日期類型對應不一樣的'0',date對應的是0000-00-00

mysql中共有5種時間類型

  • year
  • date
  • time
  • datetime
  • timestamp

注:每種類型都有一個有效的範圍,當給某類型設置一個無效值的時候,mysql會自動設置爲「0」;timestamp類能夠自動更新其時間(前提是sql-model中不包含‘NO_ZERO_DATE’)。sql

應用場景

  • date 適用於只使用日期而不使用時間部分, 顯示格式YYYY-MM-DD,有效範圍1000-01-019999-12-31
  • datetime 適用於包含日期和時間的場景,顯示格式YYYY-MM-DD HH:MM:SS,有效範圍1000-01-01 00:00:009999-12-31 23:59:59
  • timestamp 使用於包含日期和時間的場景,顯示格式YYYY-MM-DD HH:MM:SS,有效範圍1970-01-01 00:00:012038-01-19 03:14:07UTC,客戶端時間會 根據時區自動轉換

注:datetime和timestamp均可以添加6位分數部分來支持微妙精度,如2016-10-19 12:27: 33.999999數據庫

經常使用類型

datetime和timestamp對不少程序都能工做,可是某些場景下,卻有優劣之分。datetime將時間封裝在YYYYMMDDHHMMSS的整數中,與時區無關,並使用8個字節空間;timestamp使用4個字節,因此它的範圍更短,如上所述,而且和時區緊密相關,同時timestamp會自動更新,列默認屬性也是not null.安全

注:將unix時間存儲爲整數,不會帶來任何收益,一般不建議這樣作。服務器

相關文章
相關標籤/搜索