如何修改 MySQL 列以允许 NULL?

Posted

技术标签:

【中文标题】如何修改 MySQL 列以允许 NULL?【英文标题】:How do I modify a MySQL column to allow NULL? 【发布时间】:2010-09-17 19:06:37 【问题描述】:

mysql 5.0.45

改变表以允许列为空的语法是什么,或者这有什么问题:

ALTER mytable MODIFY mycolumn varchar(255) null;

我将手册解释为只是运行上面的内容,它会重新创建列,这次允许 null。服务器告诉我我有语法错误。我只是没有看到它们。

【问题讨论】:

列不是唯一的或类似的东西 【参考方案1】:

您想要以下内容:

ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

默认情况下,列可以为空。只要该列未声明UNIQUENOT NULL,就应该没有任何问题。

【讨论】:

有一个极端情况是 TIMESTAMP 类型,这取决于您的 MySQL 版本和配置可以是 NOT NULL 指定 @ConroyP 建议的 NULL 更正确。 这对我不起作用!列没有改变。可能是因为我对使用该列的另一个表有约束(当不为空时)。【参考方案2】:

您的语法错误是由查询中缺少“表”引起的

ALTER TABLE mytable MODIFY mycolumn varchar(255) null;

【讨论】:

这实际上是正确的答案 - 虽然 NULL 子句不是必需的,但提供它并没有错。 ALTER TABLE 语句中缺少的 TABLE 是真正的问题。 @SamStephens 和 Xofo:有一个主要和次要(“交替”)问题。这是对次要问题的正确答案,而接受的答案是对主要问题的正确答案。 @SamStephens 仅仅因为提供NULL 没有任何问题,它不会使这个答案比接受的答案更“正确”吗?知道默认情况下列可以为空(如接受的答案中所述)对于这个特定问题很有帮助。 OP 不知道为什么他们的声明不起作用。这个答案解释了原因。【参考方案3】:

在某些情况下(如果你得到“ERROR 1064 (42000): You have an error in your SQL syntax;...”)你需要这样做

ALTER TABLE mytable MODIFY mytable.mycolumn varchar(255);

【讨论】:

【参考方案4】:

我的解决方案:

ALTER TABLE table_name CHANGE column_name column_name type DEFAULT NULL

例如:

ALTER TABLE SCHEDULE CHANGE date date DATETIME DEFAULT NULL;

【讨论】:

【参考方案5】:

使用: ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

【讨论】:

如果您的答案在其他答案之上提供了额外的价值,那就更好了。在这种情况下,您的答案不会提供额外的价值,因为 Daniel Spiewak 已经发布了该解决方案。如果以前的答案对您有帮助,您应该在有足够的reputation 时vote it up【参考方案6】:

我的解决方案和@Krishnrohit 一样:

ALTER TABLE `table` CHANGE `column_current_name` `new_column_name` DATETIME NULL;

我实际上将列设置为NOT NULL,但通过上述查询,它已更改为NULL

附:我知道这是一个旧线程,但似乎没有人承认 CHANGE 也是正确的。

【讨论】:

以上是关于如何修改 MySQL 列以允许 NULL?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle:动态设置表中的所有 NOT NULL 列以允许 NULL

mybatis怎么修改字段为空

SQL datetime字段的值怎么才能修改为<NULL> 值

如何修改mysql 字段类型??

mysql中怎么设置某字段为当前时间

mysql如何修改开启允许远程连接