很难想象,在 Oracle 数据库中,还有未被支持的常规数据类型,Boolean 数据类型就是其中之一。
Boolean 布尔数据类型
布尔值(Boolean)是一种数据类型,可以存储 True 或 False 的值。这通常被存储为1(真)或0(假)。它是以乔治-布尔(George Boole)命名的,他在19世纪首次定义了一个代数逻辑系统。
在 Oracle 数据库中,长时间内 Boolean 类型是不被支持的,这是因为Boolean类型不属于SQL86、SQL92规范,事实上也不属于任何一个数据库规范,而且很容易通过其他方式替代实现。
在 Oracle Database 23c 中,Boolean 数据类型被支持。本质上,在存储中仍然是以 0 或 1 存储实现的。
Boolean 数据类型测试
通过创建一个数据表,定义带有 Boolean 类型的字段,可以验证这个新特性:
SQL> create table mogdb (name varchar2(10), isok boolean);
Table created.
SQL> insert into mogdb values ('Oracle' , true);
1 row created.
SQL> insert into mogdb values ('MySQL' , true);
1 row created.
SQL> insert into mogdb values ('Java' , false);
1 row created.
SQL> select * from mogdb where isok;
NAME ISOK
---------- -----------
Oracle TRUE
MySQL TRUE
SQL> select * from mogdb where not isok;
NAME ISOK
---------- -----------
Java FALSE
Boolean 类型的存储
在 Oracle 数据库中,通过 dump 函数可以转储数据的存储信息,通过以下查询,可以看到 Boolean 类型的代码编号是 252,存储的信息是以 0 或 1 标记:
SQL> select name,dump(isok) dmpok from mogdb;
NAME DMPOK
---------- --------------------------------------------------
Oracle Typ=252 Len=1: 1
MySQL Typ=252 Len=1: 1
Java Typ=252 Len=1: 0
to_boolean 函数
通过 to_boolean 函数可以将字符转换为 布尔数据类型:
SQL> select dump('true'),dump(to_boolean('true')) ;
DUMP('TRUE') DUMP(TO_BOOLEAN(
----------------------------- ----------------
Typ=96 Len=4: 116,114,117,101 Typ=252 Len=1: 1
SQL> select dump('false'),dump(to_boolean('false'));
DUMP('FALSE') DUMP(TO_BOOLEAN(
-------------------------------- ----------------
Typ=96 Len=5: 102,97,108,115,101 Typ=252 Len=1: 0
在以上 dump 输出中,也可以看到 CHAR 的数据类型编码为 96,BOOLEN 类型的编码为 252 。
关于数据类型的编码可以参考文章:Oracle 基础知识:数据库支持的数据类型信息和检索
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




