跳到主要内容

BOOLEAN

描述

BOOLEAN 是 Doris 中表示布尔值的数据类型:真值和假值。

在内部,BOOLEAN 被存储为 uint8 值,其中 0 表示 false(假),1 表示 true(真)。

与 MySQL 中 BOOLEAN 是 TINYINT(1) 的别名不同,Doris 将 BOOLEAN 作为一个独立的数据类型处理,类似于 PostgreSQL、Oracle 和其他数据库系统。

取值范围

BOOLEAN 值只能是:

  • true(显示时表示为 1)
  • false(显示时表示为 0)

在内存中,BOOLEAN 类型只存在 0 或 1,没有其他可能的值。

字面量

在 Doris 中,您可以使用关键字 truefalse(不区分大小写)来表示布尔字面量:

mysql> select TrUe, False, true;
+------+-------+------+
| TrUe | False | true |
+------+-------+------+
| 1 | 0 | 1 |
+------+-------+------+

支持的操作

逻辑运算

BOOLEAN 类型支持逻辑运算,如 AND、OR、NOT 和 XOR:

mysql> select true AND false, true OR false, NOT true, true XOR false;
+----------------+---------------+----------+----------------+
| true AND false | true OR false | NOT true | true XOR false |
+----------------+---------------+----------+----------------+
| 0 | 1 | 0 | 1 |
+----------------+---------------+----------+----------------+

算术运算

虽然 BOOLEAN 类型不直接支持算术运算,但像 true + true 这样的表达式会由于隐式类型转换而生效:

mysql> select true + true;
+-------------+
| true + true |
+-------------+
| 2 |
+-------------+

这是因为布尔值被隐式转换为 SMALLINT:CAST(TRUE AS smallint) + CAST(TRUE AS smallint)

类型转换

需要注意的是,在 Doris 中,BOOLEAN 与 TINYINT 不等价,尽管它们由于 MySQL 的习惯可能看起来相似。

当将布尔字面量插入到 TINYINT 列时,会发生隐式类型转换:

CREATE TABLE test_boolean(
u8 TINYINT
)
properties("replication_num" = "1");

mysql> insert into test_boolean values(true);

在这个例子中,布尔字面量 true 被转换为 TINYINT 值。

关键字

BOOL, BOOLEAN