我已经用Google搜索了一下,但却找不到任何内容。
为什么MySQL列类型" TIMESTAMP"需要" NULL"当其他列类型不接受时,接受空值的参数?
此外,这是唯一需要" NULL"参数接受空值?
谢谢。
答案 0 :(得分:3)
这与5.6.6及更高版本explicit_defaults_for_timestamp
中添加的系统变量有关。默认行为是:
未使用NULL属性显式声明的TIMESTAMP列被赋予NOT NULL属性。 (其他数据类型的列,如果未显式声明为NOT NULL,则允许NULL值。)将此列设置为NULL会将其设置为当前时间戳。
表中的第一个TIMESTAMP列,如果未使用NULL属性或显式DEFAULT或ON UPDATE子句声明,则会自动分配DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP属性。
第一个后面的TIMESTAMP列,如果没有使用NULL属性或显式DEFAULT子句声明,则会自动分配DEFAULT'0000- 00:00:00'(“零”时间戳)。对于没有为此类列指定显式值的插入行,该列将分配“0000-00-00 00:00:00”并且不会发出警告。
设置此变量会使TIMESTAMP
列的行为与其他列相同。计划是在将来的某个版本中,非标准行为将被完全删除,然后该变量将被弃用。