Mysql 未能为列设置默认空值

Mysql 未能为列设置默认空值,mysql,Mysql,我已经有了一个简化的表格示例: CREATE TABLE t (c INT NOT NULL); 我需要将列默认值更改为NULL,因此我尝试: ALTER TABLE t ALTER COLUMN c SET DEFAULT NULL; 但我得到了错误“错误代码:1067。c”的默认值无效”。 这看起来很奇怪,因为查询符合官方文档 我甚至试图: ALTER TABLE t ALTER COLUMN c DROP DEFAULT; 并在此之后进行“SET DEFAULT NULL”查询,但发

我已经有了一个简化的表格示例:

CREATE TABLE t (c INT NOT NULL);
我需要将列默认值更改为NULL,因此我尝试:

ALTER TABLE t ALTER COLUMN c SET DEFAULT NULL;
但我得到了错误“错误代码:1067。c”的默认值无效”。 这看起来很奇怪,因为查询符合官方文档

我甚至试图:

ALTER TABLE t ALTER COLUMN c DROP DEFAULT;
并在此之后进行“SET DEFAULT NULL”查询,但发生了相同的错误。 有趣的是,该查询类似于:

ALTER TABLE t ALTER COLUMN c SET DEFAULT 1;
执行时没有错误

我知道,在我的情况下,可以使用以下方法将列默认值更改为NULL:

ALTER TABLE t MODIFY COLUMN c INT NULL;
但是这个查询在大型表上的速度非常慢(比像“setdefault1”这样的查询慢得多)

那么,如何将默认值更改为NULL呢

我的意思是,没有“修改列”命令造成的任何开销


详细信息:MySQL x64版本5.7.10,Win8。使用MySQL Workbench进行测试。

通过将列创建为非NULL,您已经创建了一个约束-声明输入到该列中的值可能永远不会为NULL

默认值NULL(设置为NULL表示插入期间不存在值)将创建无效数据

遗憾的是,可空性约束是mysql中数据类型的一部分,因此使列可空的唯一方法是

 ALTER TABLE t MODIFY COLUMN c INT NULL;

您已经创建了不可为NULL的列“c”的表,因此不能将其默认为NULL。如果不将列修改为NULL,恐怕您永远无法将其设置为NULL。。一旦将其设置为可空,则在添加此列中没有值的任何新记录时,默认情况下它应为空。