MySQL: explicit_defaults_for_timestamp简述

老是不记得这个参数的作用,特此记一笔。此参数主要用来处理 timestamp 类型的 NULL 值行为。

5.7 默认为 off,表示启用非标准行为,表现如下:

  • 未显示声明 NULL 的 timestamp 字段,默认使用 NOT NULL 声明:
    • 表的第一个 timestamp 字段,还会自动用 DEFAULT CURRENT_TIMESTAMPand ON UPDATE CURRENT_TIMESTAMP 属性声明
    • 表的第2、3、4...个 timestamp 字段,会自动用 DEFAULT '0000-00-00 00:00:00' 属性声明(前提是 sql_mode 中关闭了 NO_ZERO_DATE 模式,如果开启则建表时会报错)
      如果字段 NOT NULL 但是用 DEFAULT 属性,也可以插入 NULL 值,并且自动转换为 DEFAULT 值

8.0 默认 on,表示关闭非标准行为,表现如下(这也是一种正常行为):

  • 未显示声明 NULL 或者 NOT NULL 的 timestamp 字段,默认使用 NULL 声明
  • 显示声明 NOT NULL 但没有声明 DEFAULT,则没有默认值
  • 对于 NOT NULL 并且有 DEFAULT 值的字段,不允许插入 NULL 值,会报错,不会自动转换为 DEFAULT 值(但可以在 insert 时不写此字段)

此参数已弃用,也就是说 MySQL 弃用了非标准行为,如果在 my.cnf 写有 explicit_defaults_for_timestamp=0,则启动时会有警告信息。

你可能感兴趣的:(MySQL: explicit_defaults_for_timestamp简述)