如何修改MySQL列以允许为空?

525

MySQL 5.0.45

如何使用语法修改表以允许列为空,或者这个语法有什么问题:

ALTER mytable MODIFY mycolumn varchar(255) null;

我理解手册的意思是仅需运行以上代码,就可以重新创建该列,这一次允许空值。但服务器告诉我存在语法错误,我却看不到。


列不唯一或其他类似的情况 - zmf
6个回答

756

您需要以下内容:

ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

默认情况下,列是可为空的。 只要该列未声明为 UNIQUE NOT NULL ,就不应该存在任何问题。


25
有一个边缘情况涉及到 TIMESTAMP 类型,具体取决于你使用的 MySQL 版本和配置,可以将其指定为 NOT NULL,但建议使用 @ConroyP 提出的方法将其设为 NULL 更为准确。 - Matthew Buckett
2
这对我没用!列没有改变。可能是因为我有一个约束到另一个表,该列被使用(当不为空时)。 - Rocologo

351

您的语法错误是由查询中缺少"table"引起的

ALTER TABLE mytable MODIFY mycolumn varchar(255) null;

43
这实际上是正确答案 - 虽然 NULL 子句不是必需的,但提供它也没有问题。ALTER TABLE 语句缺少 TABLE 是真正的问题。 - SamStephens
@SamStephens 和 Xofo:这里有一个主要问题和一个次要问题(“交替”)。这是次要问题的正确答案,而被接受的答案则是主要问题的正确答案。 - jdunk
@SamStephens 只是因为提供 NULL 没有问题,并不意味着这个答案比被接受的答案更 "正确"。知道列默认是可空的(如被接受的答案中所述)对于这个特定的问题是有帮助的。 - rybo111
1
OP不知道他们的语句为什么没有起作用。 这个答案解释了为什么。 - SamStephens

46

我的解决方案:

ALTER TABLE table_name CHANGE column_name column_name type DEFAULT NULL
例如:
ALTER TABLE SCHEDULE CHANGE date date DATETIME DEFAULT NULL;

10

我的解决方案与@Krishnrohit相同:

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

实际上,我将该列设置为NOT NULL,但是通过上面的查询,它被更改为NULL

P.S. 我知道这是一个旧的主题,但似乎没有人承认CHANGE也是正确的。


8

在某些情况下(如果您收到“ERROR 1064 (42000):您的SQL语法中有错误...”),您需要执行以下操作:

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

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


25
如果你的答案能够在其他答案基础上提供附加价值,那会更好。但在这种情况下,由于Daniel Spiewak已经发布了该解决方案,你的答案并没有提供额外的价值。如果以前的答案对你有帮助,当你获得足够的声望时,应该投赞成票。请注意,本翻译保持原意,使内容更易懂,不包含解释和额外信息。 - Luís Cruz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接