【MySQL】MySQL boolean类型

MySQL BOOLEAN数据类型

MySQL没有内置的布尔类型。 但是它使用TINYINT(1)。 为了更方便,MySQL提供BOOLEANBOOL作为TINYINT(1)的同义词。在MySQL中,0被认为是false,非零值被认为是true

MySQL BOOLEAN示例

MySQL将布尔值作为整数存储在表中,我们建立一张tasks表来作为示例展示。

1
2
3
4
5
CREATE TABLE tasks (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
completed BOOLEAN
);

我们在建表语句中将 completed设为boolean类型,但是展示表结构的时候它会变为 tinyint(1)

1
2
3
4
5
6
CREATE TABLE `tasks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`completed` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;

我们向表中插入两条数据

1
2
INSERT INTO `Test`.`tasks` (`id`, `title`, `completed`) VALUES (2, '测试', true);
INSERT INTO `Test`.`tasks` (`id`, `title`, `completed`) VALUES (3, '测试2', false);

MySQL会在存储数据之前,把truefalse转换成12再保存,下图是查询结果

因为Boolean类型是tinyint(1)的同义词,所以可以在布尔列中插入10以外的值。如下示例:

1
2
INSERT INTO `Test`.`tasks` (`id`, `title`, `completed`) VALUES (1, '打算', NULL);
INSERT INTO `Test`.`tasks` (`id`, `title`, `completed`) VALUES (4, 'MySQL', 2);

现在表中的数据如下:

如果要将结果输出为truefalse,可以使用IF函数,如下所示:

1
2
3
4
5
6
SELECT 
id,
title,
IF(completed, 'true', 'false') completed
FROM
tasks;

执行以上语句,结果如下


MySQL BOOLEAN运算符

如果你想查询表中所有 completedtrue的数据,那么就应该使用IS运算符而不是=

1
2
3
4
5
6
SELECT 
id, title, completed
FROM
tasks
WHERE
completed = TRUE

执行以上语句,结果如下:

它只返回completed列值为1的数据,要想返回所有为true的则必须使用 IS运算符

1
2
3
4
5
6
SELECT 
id, title, completed
FROM
tasks
WHERE
completed IS TRUE;

执行结果:

当然你还可以使用 IS FALSE 或者IS NOT TRUE,来查询所有待处理的数据。必须注意的是,前者只能查询出completed等于0的数据,后者还可以查询出completed等于null的数据。