【问题标题】:Create boolean column in MySQL with false as default value?在 MySQL 中使用 false 作为默认值创建布尔列?
【发布时间】:2010-02-08 11:00:44
【问题描述】:

我想在 MySQL 中创建一个带有 boolean 列的表,其默认值为 false。但它默认接受 NULL...

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您必须指定0(表示假)或1(表示真)作为默认值。这是一个例子:

    create table mytable (
         mybool boolean not null default 0
    );
    

    仅供参考:booleantinyint(1) 的别名。

    证明如下:

    mysql> create table mytable (
        ->          mybool boolean not null default 0
        ->     );
    Query OK, 0 rows affected (0.35 sec)
    
    mysql> insert into mytable () values ();
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from mytable;
    +--------+
    | mybool |
    +--------+
    |      0 |
    +--------+
    1 row in set (0.00 sec)
    

    仅供参考:我的测试是在以下版本的 MySQL 上完成的:

    mysql> select version();
    +----------------+
    | version()      |
    +----------------+
    | 5.0.18-max-log |
    +----------------+
    1 row in set (0.00 sec)
    

    【讨论】:

    • 还是这样?在 shell 脚本中,0 可能意味着成功或“真”。如果 MySQL 真的返回 'true' 和 'false' 那就太好了,这样我们就不必依赖代码来决定值的含义。
    • 顺便说一句,由于 boolean 是 tinyint(1) 的别名,这意味着您可以将布尔值设置为 0 和 1 以外的数字,它不会抱怨!这意味着如果您不小心增加或减少该字段,那么您可能会弄乱您的数据! :-O 我建议改用 ENUM 字段。
    • “成功”和“真实”是完全正交的事情。错误代码不是布尔值。
    • 我认为它是 tinyint 的更好证明是运行 show create table mytable;我明白了: CREATE TABLE mytable (mybool tinyint(1) NOT NULL DEFAULT 0 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
    【解决方案2】:

    您可以在创建时设置默认值,例如:

    CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    Married boolean DEFAULT false);
    

    【讨论】:

      【解决方案3】:

      在 MySQL 中使用 ENUM 表示 true / false,它给出并接受 true / false 值,无需任何额外代码。

      ALTER TABLE `itemcategory` ADD `aaa` ENUM('false', 'true') NOT NULL DEFAULT 'false'
      

      【讨论】:

        【解决方案4】:

        如果您将布尔列设置为非空,则默认的“默认”值为 false;您不必明确指定它。

        【讨论】:

          猜你喜欢
          • 2015-01-11
          • 1970-01-01
          • 2019-09-03
          • 1970-01-01
          • 2015-02-21
          • 2015-09-22
          • 1970-01-01
          • 2011-04-11
          • 2019-01-06
          相关资源
          最近更新 更多