搜尋

首頁  >  問答  >  主體

php - Mysql 5.7版本之後的timestamp問題

環境:

>select version();
> 5.7.16

問題:

在一表上有兩個欄位created_atupdated_at 兩個欄位類型皆為timestamp. created_at 的預設值為-00_TIcreated_at 的預設值為-00_TIMESTAMP0000MESTAMP 00 00:00:00,這時候問題就出現了,執行創建表的語句或報錯,下面是錯誤代碼:

Syntax error or access violation: 1067 Invalid default value for 'updated_at'

如果將​​

updated_at 的預設值也改為CURRENT_TIMESTAMP 那麼會順利執行,但是這就又出現一個問題,Mysql5.7以下的版本不支援一表中存在兩個預設值為CURRENT_TIsql5.7以下的版本不支援一表中存在兩個預設值為CURRENT_TIsql5.7以下的版本不支援一表中存在兩個預設值為CURRENT_TIsql5.7以下的版本不支援一表中存在兩個預設值為CURRENT_TIsql5.7以下的版本不支援一表中存在兩個預設值為CURRENT_TIsql5.7以下的版本不支援一表中存在兩個預設值

的timestamp

欄位? 所以,請求諸位大神,該怎麼解決這個

timestamp

的預設值問題?可以相容於Mysql高低版本。

🎜&^ - &^🎜
仅有的幸福仅有的幸福2838 天前684

全部回覆(3)我來回復

  • 高洛峰

    高洛峰2017-05-16 13:11:07

    5.7要求預設值在一個範圍內,好像是1970到20多少年的,你設定一個2000-01-01 00:00:00試一下應該可以

    回覆
    0
  • 阿神

    阿神2017-05-16 13:11:07

    32位元系統好像是2038年。用64位元系統。另外,盡量用時間戳保存資料。

    回覆
    0
  • 滿天的星座

    滿天的星座2017-05-16 13:11:07

    從這個update_at這個欄位的需求出發看這個問題,字面上理解這個欄位應該是用來表記錄的更新時間。
    如果更新時間有預設值,但預設值並不是更新/新增記錄時插入當前資料庫時間的話(題主用0000-00-00 00:00:00),那麼使用非當前資料庫時間的值都使這個欄位的意義不存在(冗餘/錯誤的資料)。
    對應資料庫中錯誤的數據,可以不用進行保存。
    綜上所述,題主看下是否能不給update_at這個欄位預設值?

    回覆
    0
  • 取消回覆