【问题标题】:Difference between NULL DEFAULT NULL and DEFAULT NULL in MySQL?MySQL中NULL DEFAULT NULL和DEFAULT NULL之间的区别?
【发布时间】:2012-09-03 00:41:44
【问题描述】:

最近我在 MySQL 中遇到了一个新问题。我正要用

创建一个新表

col1 TIMESTAMP DEFAULT NULL

(即具有默认 NULL 值的列),但在创建时给了我一个错误:

列的默认值无效

但是当我尝试col1 TIMESTAMP NULL DEFAULT NULL 时,该表已创建。

我想知道以上两种语法有什么区别。我之前在列中的一些插入 NULL 值中也遇到了这个问题。

谁能解释这个问题的原因,比如它是特定于版本的问题还是 MySQL 的其他问题?

【问题讨论】:

  • 如果您只有col1 timestamp null,则可以省略default null(至少根据文档)。不可为空的时间戳列具有预定义的特殊属性,但是当您显式将该列设为可空时,它们会被抑制。

标签: mysql sql create-table


【解决方案1】:

第一个NULL 表示该列可为空,即接受NULL。第二个NULL(在DEFAULT 之后)是默认值。

如果您只有默认值,但让列拒绝空值,则无法使用该默认值。

(不过,我的印象是,如果您既未指定 NULL 也未指定 NOT NULL,则该列可以为空,所以您看到的内容有点令人困惑)。

【讨论】:

  • 你能解释一下如果你只有默认值,但是让列拒绝空值,那么那个默认值就不能用了吗?
  • 默认值必须是列的可接受值。如果您说该列不可为空,则不能输入NULL。所以NULL也不能作为默认值。
  • 你的意思是说只有在列接受NULL的情况下才能插入NULL?
  • 是的,您只能将 NULL 插入可以为空的列中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-22
相关资源
最近更新 更多