如何修改MySQL栏以允许NULL?


396

MySQL 5.0.45

更改表以允许列为空的语法是什么,或者这是怎么回事:

ALTER mytable MODIFY mycolumn varchar(255) null;

我将手册解释为仅运行上面的手册,它将重新创建该列,这次允许为空。服务器告诉我我有语法错误。我只是看不到他们。


列不是唯一的或类似的东西
zmf

Answers:


599

您需要以下内容:

ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

列默认为空。只要未声明UNIQUE或列NOT NULL,就不会有任何问题。


14
有一个极端的情况是这种TIMESTAMP类型,根据您的MySQL版本和配置,可以按照@ConroyP的建议进行NOT NULL指定NULL,这是更正确的选择。
马修·巴克特

1
这对我没有用!该列未更改。可能是因为我对使用该列的另一个表有约束(当不为null时)。
Rocologo

250

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

ALTER TABLE mytable MODIFY mycolumn varchar(255) null;

26
这实际上是正确的答案-虽然不需要NULL子句,但提供它没有错。ALTER TABLE语句中缺少的TABLE是真正的问题。
SamStephens 2014年

@SamStephens和Xofo:有一个主要和次要(“替代”)问题。这是对次要问题的正确答案,而被接受的答案是对主要问题的正确答案。
jdunk

@SamStephens仅仅是因为提供没有什么问题NULL,它不会比接受的答案更“正确”吗?知道列默认情况下可以为空(如接受的答案中所述)对于此特定问题很有帮助。
rybo111

OP不知道为什么他们的陈述不起作用。这个答案解释了为什么。
SamStephens

28

我的解决方案:

ALTER TABLE table_name CHANGE column_name column_name type DEFAULT NULL

例如:

ALTER TABLE SCHEDULE CHANGE date date DATETIME DEFAULT NULL;


3

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

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

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

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


-5

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


18
如果您的答案除了其他答案之外还提供其他价值,那会更好。在这种情况下,由于Daniel Spiewak已经发布了该解决方案,因此您的答案没有其他价值。如果以前的答案是有帮助的话,你应该投上一票,一旦你有足够的声誉
路易斯·克鲁兹
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.