BIT数据类型
BIT(位)数据类型用于表示精确到位的二进制数据,分为定长与变长两种。
定长位类型
语法格式:
BIT[(SIZE)]
定长位类型位数固定。
- 指定位数SIZE时,其取值范围为[1,60000]。
- 未指定位数SIZE时,默认为1位。
变长位类型
语法格式:
BIT VARYING[(SIZE)]
或
VARBIT[(SIZE)]
变长位类型位数可变。
- 指定位数SIZE时,其取值范围为[1,60000]。
- 未指定位数SIZE时,默认为不限制,最大值为60000。
类型转换
转换方式取决于源数据位数与目标数据所需位数大小关系。
源数据位数等于目标数据所需位数
来源 \ 目标 | BIT | VARBIT | BINARY | CHAR |
---|---|---|---|---|
BIT | 直接转换 | 直接转换 | 直接转换 | |
VARBIT | 直接转换 | 直接转换 | 直接转换 | |
BINARY | 直接转换 | 直接转换 | - | - |
CHAR | - | - |
源数据位数小于目标数据所需位数
来源 \ 目标 | BIT | VARBIT | BINARY | CHAR |
---|---|---|---|---|
BIT | 右侧补0值 | 直接转换 | 右侧补0值 | |
VARBIT | 右侧补0值 | 直接转换 | 右侧补0值 | |
BINARY | 左侧补0值 | 直接转换 | - | - |
CHAR | - | - |
源数据位数大于目标数据所需位数
来源 \ 目标 | BIT | VARBIT | BINARY | CHAR |
---|---|---|---|---|
BIT | 右侧截断 | 右侧截断 | 右侧截断 | |
VARBIT | 右侧截断 | 右侧截断 | 右侧截断 | |
BINARY | 报错超长 | 报错超长 | - | - |
CHAR | - | - |
字面量语法
位类型字面量语法如下(以位数为3的位数据101
为例):
b'101'`
或
B'101'
位运算符
运算表达式 | 说明 |
---|---|
VARBIT & VARBIT -> VARBIT | 按位与 |
VARBIT | VARBIT -> VARBIT | 按位与 |
VARBIT ^ VARBIT -> VARBIT | 按位异或 |
~ VARBIT -> VARBIT | 按位取反 |
VARBIT << INTEGER -> VARBIT | 左移位 |
VARBIT << INTEGER -> VARBIT | 左移位 |
VARBIT >> INTEGER -> VARBIT | 右移位 |
说明:
以上表达式中任意操作数为NULL,结果为NULL。 当位运算操作数长度不等时,将右对齐,左侧补0值,再进行位比较。
重要变更
B'11'
字面量语法此前为BINARY类型,内容为十六进制字符串,变更为BIT类型,内容为二进制字符串。- 新增
<<
与>>
移位运算符,由于与存储过程<<ColID>>
标签语法存在冲突,不允许连续的移位运算表达式,如SELECT B'1'>>1>>1
,将报语法错误,但可通过括号实现:SELECT (B'1'>>1)>>1
。