老是不記得這個(gè)參數(shù)的作用盆昙,特此記一筆羽历。此參數(shù)主要用來處理 timestamp 類型的 NULL 值行為。
5.7 默認(rèn)為 off淡喜,表示啟用非標(biāo)準(zhǔn)行為秕磷,表現(xiàn)如下:
- 未顯示聲明 NULL 的 timestamp 字段,默認(rèn)使用 NOT NULL 聲明:
- 表的第一個(gè) timestamp 字段炼团,還會(huì)自動(dòng)用 DEFAULT CURRENT_TIMESTAMPand ON UPDATE CURRENT_TIMESTAMP 屬性聲明
- 表的第2澎嚣、3、4...個(gè) timestamp 字段瘟芝,會(huì)自動(dòng)用 DEFAULT '0000-00-00 00:00:00' 屬性聲明(前提是 sql_mode 中關(guān)閉了 NO_ZERO_DATE 模式易桃,如果開啟則建表時(shí)會(huì)報(bào)錯(cuò))
如果字段 NOT NULL 但是用 DEFAULT 屬性,也可以插入 NULL 值锌俱,并且自動(dòng)轉(zhuǎn)換為 DEFAULT 值
8.0 默認(rèn) on晤郑,表示關(guān)閉非標(biāo)準(zhǔn)行為,表現(xiàn)如下(這也是一種正常行為):
- 未顯示聲明 NULL 或者 NOT NULL 的 timestamp 字段贸宏,默認(rèn)使用 NULL 聲明
- 顯示聲明 NOT NULL 但沒有聲明 DEFAULT造寝,則沒有默認(rèn)值
- 對(duì)于 NOT NULL 并且有 DEFAULT 值的字段,不允許插入 NULL 值吭练,會(huì)報(bào)錯(cuò)诫龙,不會(huì)自動(dòng)轉(zhuǎn)換為 DEFAULT 值(但可以在 insert 時(shí)不寫此字段)
此參數(shù)已棄用,也就是說 MySQL 棄用了非標(biāo)準(zhǔn)行為鲫咽,如果在 my.cnf 寫有 explicit_defaults_for_timestamp=0签赃,則啟動(dòng)時(shí)會(huì)有警告信息谷异。