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

解決 MySQL 5.6 "TIMESTAMP with implicit DEFAULT value is deprecated" 警告

     編輯:MySQL 綜合教學

解決 MySQL 5.6 "TIMESTAMP with implicit DEFAULT value is deprecated" 警告

安裝 MySQL 5.6 時常遇到以下警告:

[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

根本原因

MySQL 5.6.6 起,TIMESTAMP 列的隱式默認行為被標記為廢棄。舊版本(5.6.6 前)默認行為:

  • 未顯式聲明 NULL 屬性的 TIMESTAMP 列默認 NOT NULL,賦值 NULL 會自動存為當前時間戳。
  • 表中第一個無屬性聲明的 TIMESTAMP 列自動獲得 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP。
  • 第二個 TIMESTAMP 列默認值為 '0000-00-00 00:00:00'。

這種「詭異」的隱式行為易導致遷移兼容性問題,故 5.6 廢棄並提示警告。

解決方案

在配置文件 my.cnf 的 [mysqld] 節點添加:

[mysqld]
explicit_defaults_for_timestamp=true

重啟 MySQL 後警告消失,TIMESTAMP 行為變為標準化:

  • 未聲明 NOT NULL 時允許 NULL,無自動填充行為。
  • 不再自動分配 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP。
  • 聲明 NOT NULL 但無默認值的列,嚴格 SQL 模式下插入不賦值報錯;非嚴格模式下存 '0000-00-00 00:00:00' 並警告(同 DATETIME 行為一致)。

參數含義

explicit_defaults_for_timestamp 即「顯式指定 TIMESTAMP 列的默認值」。開啟後,若需保留自動時間戳特性,必須在建表時顯式聲明:

CREATE TABLE t (
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

這樣既消除了警告,又讓行為更可控、可移植,建議所有 5.6+ 部署均開啟此參數。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved