MySQL里 没有 boolean类型 怎么办?tinyint(1)

总结:MySQL中 使用布尔类型的字段,就用 tinyint(1),true 为1 false 为0

在MySQL中,确实没有专门的boolean数据类型。不过,MySQL通常使用TINYINT(1)作为布尔值的替代。当使用TINYINT(1)来表示布尔值时,通常约定0代表false,而1代表true

例如,你可以在创建表时使用TINYINT(1)来表示一个布尔字段:

CREATE TABLE example (
    id INT AUTO_INCREMENT PRIMARY KEY,
    is_active TINYINT(1) NOT NULL
);

在这个例子中,is_active字段可以存储01,分别代表falsetrue

当你查询这个字段时,可以像这样使用:

SELECT * FROM example WHERE is_active = 1; -- 查找所有活跃的记录

或者:

UPDATE example SET is_active = 0 WHERE id = 5; -- 将ID为5的记录的is_active设置为false

虽然TINYINT(1)在MySQL中用于表示布尔值,但实际上它可以存储从-128到127的任何整数值(当使用有符号整数时)。因此,为了确保数据的准确性,你可能需要在应用层或者在数据库层面通过触发器或约束来确保该字段只包含01

另外,从MySQL 8.0.16版本开始,MySQL也支持了使用BOOLEANBOOL作为别名来定义TINYINT(1)字段,但这仅仅是语法上的便利,内部表示仍然是TINYINT(1)。例如:

CREATE TABLE example (
    id INT AUTO_INCREMENT PRIMARY KEY,
    is_active BOOLEAN NOT NULL -- 实际上是TINYINT(1)
);

在这个例子中,is_active字段在功能上与使用TINYINT(1)定义是相同的。

img

img

image

image

image

image

image

img

img

另附Mysql 整型长度(或叫显示宽度)的问题:https://www.cnblogs.com/del88/p/12882125.html


tinyint(1) vs bit(1)

看到下面有人评论说 bit(1),接下来看下 他们的对比:
在MySQL中,BIT(1)TINYINT(1)都可以用来表示布尔值,但它们之间存在一些关键的差异。以下是关于这两者之间选择的考虑因素:

  1. 存储空间

    • BIT(1):仅占用1位,非常节省空间,适合存储大量的布尔值。
    • TINYINT(1):实际上占用1个字节(8位),在空间效率上不如BIT(1)
  2. 可读性和易用性

    • TINYINT(1):返回的值是直观的十进制数(1或0),便于阅读和理解。
    • BIT(1):查询结果可能会以二进制字符串(如b'1'b'0')的形式返回,这可能需要额外的处理来转换为人类可读的格式。
  3. 性能

    • 对于大量数据的读取和写入操作,BIT(1)由于占用的空间较小,可能具有性能优势。
    • 但在进行数值计算或逻辑操作时,TINYINT(1)可能更为方便和高效。
  4. 可移植性和兼容性

    • TINYINT(1):作为一种更通用的数据类型,它在不同的数据库系统中通常有更好的兼容性和可移植性。
    • BIT(1):可能在某些特定的数据库系统中不受支持或行为有所不同。
  5. SQL查询的方便性

    • 在进行SQL查询时,TINYINT(1)可以更方便地用于数值比较和逻辑操作。
    • BIT(1)在进行比较时可能需要显式的类型转换。
  6. 扩展性

    • 如果你预计你的“布尔”字段未来可能需要存储除真/假以外的更多状态,TINYINT可以更容易地扩展到更大的数值范围。

综上所述,选择BIT(1)还是TINYINT(1)取决于你的具体需求和使用场景。如果你非常关心存储空间,并且确信你的字段将始终只表示真/假值,那么BIT(1)可能是一个更好的选择。然而,如果你更看重可读性和易用性,或者你可能需要在不同的数据库系统之间迁移数据,那么TINYINT(1)可能更适合你。
可见还是tinyint(1)更好,更合适

在 MySQL 8 中,没有一个专门的 BOOLEAN 数据类型。但是,MySQL 通过使用 TINYINT 类型来表示布尔值。这是因为 TINYINT 是一个占用一个字节的整型,可以存储从 -128 到 127 的整数值。当你将一个字段定义为 BOOLEAN 时,MySQL 实际上是将它视为 TINYINT(1)。这里的 (1) 并不限制存储的数值范围,只是表示该字段在显示时的一个宽度提示。

在实践中,你可以使用 BOOLEANBOOL 关键字来定义布尔字段,但请记住,在 MySQL 中这些最终会被解释为 TINYINT 类型。通常,开发者会使用 0 表示 FALSE,1 表示 TRUE

例如,以下两个语句在 MySQL 中是等价的,都会创建一个名为 is_active 的字段,其数据类型为 TINYINT(1):

CREATE TABLE my_table (
    id INT AUTO_INCREMENT,
    is_active BOOLEAN,
    PRIMARY KEY (id)
);
CREATE TABLE my_table (
    id INT AUTO_INCREMENT,
    is_active TINYINT(1),
    PRIMARY KEY (id)
);

所以,虽然 MySQL 8 没有原生的 BOOLEAN 类型,但你可以通过 TINYINT 类型来实现布尔值的存储,并且可以使用 BOOLEANBOOL 语法来让 SQL 语句更具可读性。

posted on 2020-03-21 12:07  del88  阅读(5138)  评论(1编辑  收藏  举报