首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 5.6 TIMESTAMP 行為變化深度解析

     編輯:MySQL 綜合教學

MySQL 5.6 TIMESTAMP 行為變化深度解析

MySQL 5.6.6 版本起,TIMESTAMP 列的隱式默認行為被廢棄,啟動時會報警告。本文通過實測截圖詳細對比 5.6.6 前後的行為差異。

5.6.6 前默認行為(舊版)

  • 未聲明 NULL 的 TIMESTAMP 默認 NOT NULL,插入 NULL 存當前時間戳。
  • 第一個 TIMESTAMP 列自動獲 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP。
  • 第二個 TIMESTAMP 列默認 '0000-00-00 00:00:00'。

舊版單列 TIMESTAMP 行為 舊版雙列 TIMESTAMP 行為

5.6.6 後新行為(開啟 explicit_defaults_for_timestamp)

在 my.cnf 添加 explicit_defaults_for_timestamp=true 重啟後:

  • TIMESTAMP 未聲明 NOT NULL 時允許 NULL,無自動填充。
  • 不再自動分配 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP。

新版 TIMESTAMP 不設置 NULL 屬性

  • 聲明 NOT NULL 但無默認值:嚴格模式報錯,非嚴格模式存零時間並警告(同 DATETIME)。

新版 TIMESTAMP 設置 NOT NULL

關鍵結論

  1. 行為變更與存儲引擎無關。
  2. explicit_defaults_for_timestamp 關閉了「詭異」隱式默認,強制開發者顯式聲明意圖,提升代碼可維護性。
  3. 升級 5.6 時務必評估現有表結構,補全顯式默認值定義,避免應用層報錯。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved