Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


BIT数据类型

📄字数 1.6K
👁️阅读量 加载中...

BIT数据类型用于表示精确到位的二进制数据,包括定长与变长两种类型。

定长位类型

语法格式:

sql
BIT[(SIZE)]

定长位类型位数固定。

  • 指定位数SIZE时,其取值范围为[1,60000]。
  • 未指定位数SIZE时,默认为1位。

变长位类型

语法格式:

sql
BIT VARYING[(SIZE)]

VARBIT[(SIZE)]

变长位类型位数可变。

  • 指定位数SIZE时,其取值范围为[1,60000]。
  • 未指定位数SIZE时,默认为不限制,最大值为60000。

字面量语法

位类型字面量语法如下(以位数为3的位数据101为例):

sql
b'101'

B'101'

示例:

sql
-- BIT类型,创建BIT定长与变长,插入数据和查询数据
SQL> CREATE TABLE tab_bit_test(col1 BIT, col2 BIT VARYING, col3 VARBIT);
 
SQL> INSERT INTO tab_bit_test VALUES('1', '1100', '111000');

SQL> INSERT INTO tab_bit_test VALUES(b'0', B'0011', B'000111');

SQL> SELECT * FROM tab_bit_test;
+------+---------+-----------+
| COL1 |  COL2   |   COL3    |
+------+---------+-----------+
| b'1' | b'1100' | b'111000' |
| b'0' | b'0011' | b'000111' |
+------+---------+-----------+

BIT转换规则

转换方式取决于源数据位数与目标数据所需位数大小关系。

  • 源数据位数等于目标数据所需位数
来源\目标BITVARBITBINARYCHAR
BIT直接转换直接转换直接转换MySQL模式:视为字符串二进制,直接转换。
其他模式:按位字符串转换,直接转换。
VARBIT直接转换直接转换直接转换MySQL模式:视为字符串二进制,直接转换。
其他模式:按位字符串转换,直接转换。
BINARY直接转换直接转换--
CHARMySQL模式:视为字符串二进制,直接转换。
其他模式:按位字符串解析,直接转换。
MySQL模式:视为字符串二进制,直接转换。
其他模式:按位字符串解析,直接转换。
--
  • 源数据位数小于目标数据所需位数
来源\目标BITVARBITBINARYCHAR
BIT右侧补0值直接转换右侧补0值MySQL模式:视为字符串二进制,直接转换。
其他模式:按位字符串转换,右侧补空格。
VARBIT右侧补0值直接转换右侧补0值MySQL模式:视为字符串二进制,直接转换。
其他模式:按位字符串转换,右侧补空格。
BINARY左侧补0值直接转换--
CHARMySQL模式:视为字符串二进制,左侧补0值。
其他模式:按位字符串解析,右侧补0值。
MySQL模式:视为字符串二进制,直接转换。
其他模式:按位字符串解析,直接转换
-
  • 源数据位数大于目标数据所需位数
来源\目标BITVARBITBINARYCHAR
BIT右侧截断右侧截断右侧截断MySQL模式:视为字符串二进制,右侧截断。
其他模式:按位字符串转换,右侧截断。
VARBIT右侧截断右侧截断右侧截断MySQL模式:视为字符串二进制,右侧截断。
其他模式:按位字符串转换,右侧截断。
BINARY报错超长报错超长--
CHARMySQL模式:报错超长。
其他模式:按位字符串解析,右侧截断。
MySQL模式:报错超长。
其他模式:按位字符串解析,右侧截断。
--

位运算符

运算表达式结果类型说明
VARBIT & VARBITVARBIT按位与
VARBIT | VARBITVARBIT按位与
VARBIT ^ VARBITVARBIT按位异或
~ VARBITVARBIT按位取反
VARBIT <<INTEGERVARBIT左移位
VARBIT >>INTEGERVARBIT右移位

提示

  • 以上表达式中任意操作数为NULL,结果为NULL。
  • 当位运算操作数长度不等时,将右对齐,左侧补0值,再进行位比较。
  • <<>>移位运算符与存储过程的<<ColumnName>>标签在语法上存在冲突,不允许连续的移位运算表达式。如SELECT B'1'>>1>>1。如需使用连续移位运算符,可通过括号实现:SELECT (B'1'>>1)>>1