【问题标题】:NULL value inserted for previous value in boolean column in mysql为mysql中布尔列中的先前值插入NULL值
【发布时间】:2017-08-04 13:02:41
【问题描述】:

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

alter table result add column failed boolean default 0;

虽然表中以前的记录在失败的字段中获得了 NULL 值,但这工作正常。如果字段数据类型是布尔值并且默认设置为 0,我不确定这怎么可能。

谁能帮忙

【问题讨论】:

  • mysql中没有布尔数据类型
  • 我相信 MySQL 会自动处理这种数据类型,并转换为 tinyint。
  • 我还发现这种行为在 MariaDB 中出现,但在 MySQL 服务器上没有。同样根据 MariaDB 文档,“表中每个现有行的新列的值都设置为其默认值”所以我认为这种数据类型转换在 MariaDB 中没有正确进行

标签: mysql null boolean alter


【解决方案1】:

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

UPDATE result SET failed = 0 WHERE failed = null;

【讨论】:

  • 我是否总是需要在创建列之后或仅在创建时进行此更新,可以解决这个问题吗?
  • 正如 diiN______ 解释的那样,如果您将要添加的列设置为 NOT NULL,它将使用默认值而不是现有行的 null
  • 我还发现这种行为在 MariaDB 中出现,但在 MySQL 服务器上没有。同样根据 MariaDB 文档,“表中每个现有行的新列的值都设置为其默认值”。我检查了 MariaDB 的语法,可以看出区别:alter table result add column failed boolean set default 0;
【解决方案2】:

这就是它的使用方法

ALTER boolColumn SET DEFAULT 0;

【讨论】:

    【解决方案3】:

    您现有数据未获得默认值的原因是您将列添加为NULL。这意味着只有新数据才会获得默认值。如果你想为现有数据设置默认值,你应该已经添加了NOT NULL的列:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 2011-11-11
      • 2015-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多