Skip to main content

MySQL布尔数据类型简介

MySQL布尔数据类型简介

MySQL没有内置的布尔类型。然而,它使用了TINYINT(1)。为了方便起见,MySQL提供了BOOLEAN或BOOL作为TINYINT(1)的同义词。

在MySQL中,零被视为假,非零值被视为真。要使用布尔文字,请使用分别计算为1和0的常量TRUE和FALSE。请参见以下示例:

SELECT true, false, TRUE, FALSE, True, False;
-- 1 0 1 0 1 0

MySQL布尔示例

MySQL将布尔值作为整数存储在表中。为了演示这一点,让我们看看下面的任务表:

CREATE TABLE tasks (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
completed BOOLEAN
);

尽管我们将完成的列指定为布尔值,但当我们显示表定义时,它是TINYINT(1),如下所示:

DESCRIBE tasks;

MySQL BOOLEAN example

以下语句在tasks表中插入两行:

INSERT INTO tasks(title,completed)
VALUES('Master MySQL Boolean type',true),
('Design database table',false);

在将数据保存到布尔列之前,MySQL会将其转换为1或0。以下查询从tasks表中检索数据:

SELECT 
id, title, completed
FROM
tasks;

MySQL BOOLEAN SELECT example

如您所见,true和false被转换为1和0。

因为Boolean是TINYINT(1),所以可以在Boolean列中插入除1和0之外的值。考虑下面的例子:

INSERT INTO tasks(title,completed)
VALUES('Test Boolean with a number',2);

它运转良好。

MySQL BOOLEAN integer example

如果要将结果输出为true和false,可以按如下方式使用If函数:

SELECT 
id,
title,
IF(completed, 'true', 'false') completed
FROM
tasks;

MySQL BOOLEAN IF function example

MySQL布尔运算符

要获取tasks表中所有已完成的任务,您可能会提出以下查询:

SELECT 
id, title, completed
FROM
tasks
WHERE
completed = TRUE;

MySQL BOOLEAN comparison operator

如您所见,它只返回了完成值为1的任务。要修复它,必须使用IS运算符:

SELECT 
id, title, completed
FROM
tasks
WHERE
completed IS TRUE;

MySQL BOOLEAN IS operator

在本例中,我们使用IS运算符对布尔值进行测试。

要获取挂起的任务,请使用IS FALSE或IS NOT TRUE,如下所示:

SELECT 
id, title, completed
FROM
tasks
WHERE
completed IS NOT TRUE

MySQL BOOLEAN IS NOT operator

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