为mysql中布尔列中的前一个值插入空值

为mysql中布尔列中的前一个值插入空值,mysql,null,boolean,alter,Mysql,Null,Boolean,Alter,我在MySQL表中添加了一个新列,如下所示: 更改表格结果添加列失败布尔值默认值0; 尽管表中以前的记录在failed字段中获得空值,但这仍然可以正常工作。如果字段数据类型为布尔值,并且默认设置为0,我不确定这怎么可能 有人可以帮忙吗?它设置为空,因为您在添加列之前插入了这些行,默认值仅适用于新插入。您可以更新结果表中failed为null的所有值,并将其设置为0以解决此问题 UPDATE result SET failed = 0 WHERE failed = null; 这就是如何使用它

我在MySQL表中添加了一个新列,如下所示:

更改表格结果添加列失败布尔值默认值0;
尽管表中以前的记录在failed字段中获得空值,但这仍然可以正常工作。如果字段数据类型为布尔值,并且默认设置为0,我不确定这怎么可能


有人可以帮忙吗?

它设置为空,因为您在添加列之前插入了这些行,默认值仅适用于新插入。您可以更新结果表中failed为null的所有值,并将其设置为0以解决此问题

UPDATE result SET failed = 0 WHERE failed = null;
这就是如何使用它

ALTER boolColumn SET DEFAULT 0;

现有数据未获得默认值的原因是,您正在将列添加为
NULL
。这意味着只有新数据才会获得默认值。如果要为现有数据设置默认值,则应添加带有
NOT NULL
的列:

ALTER TABLE result
ADD COLUMN failed BOOLEAN NOT NULL DEFAULT 0;

MySQL中没有布尔数据类型。我相信MySQL会自动处理该数据类型,并将其转换为tinyint。我还发现,这种行为在MariaDB中出现过,但在MySQL服务器上没有。此外,根据MariaDB文档,“表中每个现有行的新列的值都设置为其默认值”,因此我认为在MariaDBDo中没有正确进行此数据类型转换。我始终需要在列创建后或仅在创建时进行此更新,可以处理此问题吗?正如diiN所解释的,如果您将列设置为添加为NOTNULL,它将对现有行使用默认值而不是NULL,因此我发现这种行为在MariaDB中看到,但在MySQL服务器上没有看到。同样根据MariaDB doc,“表中每个现有行的新列的值设置为其默认值”。我检查了MariaDB的语法,发现了不同之处:altertable result add column failed boolean set default 0;