MySQL從5.5升級到5.6,TIMESTAMP的變化,5.6timestamp

來源:互聯網
上載者:User

MySQL從5.5升級到5.6,TIMESTAMP的變化,5.6timestamp
前言

前段時間,系統MySQL從5.5升級到了5.6,系統出現了大量的異常。大部分異常引起原因是由於TIMESTAMP的行為發生了變化。

TIMESTAMP在MySQL5.5中的行為
  • 第一個未設定預設值的TIMESTAMP NOT NULL欄位隱式預設值:
    CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  • 後面未設定預設值的TIMESTAMP NOT NULL欄位隱式預設值:
    0000-00-00 00:00:00
  • TIMESTAMP NOT NULL欄位插入NULL時,會使用隱式預設值:
    CURRENT_TIMESTAMP
  • 不支援多個CURRENT_TIMESTAMP 預設值
TIMESTAMP在MySQL5.6中的行為
  • 支援多個CURRENT_TIMESTAMP 預設值
  • 可以相容5.5的行為,支援隱性預設值
    • explicit_defaults_for_timestamp=0
    • 我測試安裝的MySQL5.6預設使用這個參數,啟動時,伺服器會給出一個警告。
      [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use –explicit_defaults_for_timestamp server option (see documentation for more details).
  • 可以去掉隱性預設值
    • explicit_defaults_for_timestamp=1
總結
  • MySQL5.5中TIMESTAMP行為是比較詭異的,會造成一些隱含的問題,比如程式中傳入了NULL值
  • MySQL5.6中可以將TIMESTAMP的行為變得正常,但會存在相容問題
  • explicit_defaults_for_timestamp參數未來會消失
  • 我們不要過度依賴資料庫的特性,這些特性會給應用程式造成掣肘

參考:http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_explicit_defaults_for_timestamp
本文來自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/45625841,轉載請註明。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.