在以前的配置中,除了目錄以外,惟獨添加了這一項配置,爲何?mysql
由於mysql中timestamp類型和其餘的類型不同;sql
在以前先了解一下current timestamp和on update current timestamp:併發
a. current timestamp :當insert時,若是timestamp列屬性設爲current_timestamp,那麼該列會被強制寫入當前的系統時間(不管你是否是設置了默認值);spa
b. on update current timestamp:當update時,若是字段屬性設爲on update current_timestamp,那麼該列會被強制寫入當前系統時間(不管是否要更新該列);code
官方解釋以下:server
1. 在默認狀況下(explicit_defaults_for_timestamp=1),若是timestamp數據列沒有明確設置null屬性,那麼該列會被自動添加not null屬性,若是寫入數據時設置null,那麼mysql會自動把當前時間戳寫入該列,做爲默認值 ...blog
注:其餘類型的列,在沒有明確設置not null的狀況下,默認是容許null值;ci
2. 表中若是有多個timestamp列,那麼第一列若是沒有指定null或者設置默認值,也沒有指定on update語句,那麼該列會被自動添加default current_timestamp和on update current_timestamp屬性;it
3.同第2條,除了第一列以外,其餘的timestamp列若是沒有指定null屬性,也沒有指定默認值,那麼該列會被自動添加default '0000-00-00 00:00:00'屬性;若是insert語句沒有爲該列添加指定值,那麼該列會被插入'0000-00-00 00:00:00',並且不會提示警告;io
因此咱們在my.ini配置文件中,添加了該項配置,不然啓動時,會提示如下報警:
[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)以後有什麼效果呢?
1. 若是timestamp列沒有顯示指定not null屬性,那麼默認容許null,當插入數據時,不會被寫入currrent timestamp;
2. mysql不會自動給第一個timestamp列添加default current_timestamp和on update current_timestamp屬性(除非你在建表時顯示指明);
3. 若是timestamp列指明是not null屬性,並且沒有指定默認值,這時候寫入數據時若是不給該列寫入數據,那麼有如下兩種狀況:
a. 指定strict sql_mode的狀況下,會直接報錯;
b. 未指定strict sql_mode的狀況下,會默認插入'0000-00-00 00:00:00',併發生一個報警;