摘要:本教程向您展示如何使用 MySQL BOOLEAN 数据类型来存储布尔值 true 和 false。
MySQL BOOLEAN 数据类型简介
MySQL没有内置的布尔类型。但是,它使用TINYINT(1)
代替。为了更方便,MySQL 提供了BOOLEAN
或BOOL
作为TINYINT(1)
的同义词。
在 MySQL 中,零被视为 false,非零值被视为 true。要使用布尔文字,请使用分别计算结果为 1 和 0 的常量TRUE
和FALSE
。请参见以下示例:
SELECT true, false, TRUE, FALSE, True, False;
-- 1 0 1 0 1 0
Code language: SQL (Structured Query Language) (sql)
MySQL 布尔值示例
MySQL 将布尔值作为整数存储在表中。为了演示这一点,让我们看一下下面的tasks
表:
CREATE TABLE tasks (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
completed BOOLEAN
);
Code language: SQL (Structured Query Language) (sql)
尽管我们将完整列指定为BOOLEAN
,但当我们显示表定义时,它是TINYINT(1)
如下所示:
DESCRIBE tasks;
Code language: SQL (Structured Query Language) (sql)

以下语句将 2 行插入到tasks
表中:
INSERT INTO tasks(title,completed)
VALUES('Master MySQL Boolean type',true),
('Design database table',false);
Code language: SQL (Structured Query Language) (sql)
在将数据保存到布尔列之前,MySQL 将其转换为 1 或 0。以下查询从tasks
表中检索数据:
SELECT
id, title, completed
FROM
tasks;
Code language: SQL (Structured Query Language) (sql)

正如你所看到的, true
和false
被转换为 1 和 0。
由于 Boolean 为TINYINT(1)
,因此您可以将 1 和 0 以外的值插入到 Boolean 列中。考虑以下示例:
INSERT INTO tasks(title,completed)
VALUES('Test Boolean with a number',2);
Code language: SQL (Structured Query Language) (sql)
它运行良好。

如果想要输出结果为true
和false
,可以使用IF
函数,如下所示:
SELECT
id,
title,
IF(completed, 'true', 'false') completed
FROM
tasks;
Code language: SQL (Structured Query Language) (sql)

MySQL 布尔运算符
要获取tasks
表中所有已完成的任务,您可能会提出以下查询:
SELECT
id, title, completed
FROM
tasks
WHERE
completed = TRUE;
Code language: SQL (Structured Query Language) (sql)

如您所见,它仅返回completed
值为 1 的任务。要修复它,您必须使用IS
运算符:
SELECT
id, title, completed
FROM
tasks
WHERE
completed IS TRUE;
Code language: SQL (Structured Query Language) (sql)

在此示例中,我们使用IS
运算符来根据布尔值测试值。
要获取挂起的任务,请使用IS FALSE
或IS NOT TRUE
如下所示:
SELECT
id, title, completed
FROM
tasks
WHERE
completed IS NOT TRUE
Code language: SQL (Structured Query Language) (sql)

在本教程中,您学习了如何使用MySQL BOOLEAN
数据类型(它是TINYINT(1)
的同义词),以及如何操作布尔值。