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转换规则
转换方式取决于源数据位数与目标数据所需位数大小关系。
- 源数据位数等于目标数据所需位数
来源\目标 | BIT | VARBIT | BINARY | CHAR |
---|---|---|---|---|
BIT | 直接转换 | 直接转换 | 直接转换 | MySQL模式:视为字符串二进制,直接转换。 其他模式:按位字符串转换,直接转换。 |
VARBIT | 直接转换 | 直接转换 | 直接转换 | MySQL模式:视为字符串二进制,直接转换。 其他模式:按位字符串转换,直接转换。 |
BINARY | 直接转换 | 直接转换 | - | - |
CHAR | MySQL模式:视为字符串二进制,直接转换。 其他模式:按位字符串解析,直接转换。 | MySQL模式:视为字符串二进制,直接转换。 其他模式:按位字符串解析,直接转换。 | - | - |
- 源数据位数小于目标数据所需位数
来源\目标 | BIT | VARBIT | BINARY | CHAR |
---|---|---|---|---|
BIT | 右侧补0值 | 直接转换 | 右侧补0值 | MySQL模式:视为字符串二进制,直接转换。 其他模式:按位字符串转换,右侧补空格。 |
VARBIT | 右侧补0值 | 直接转换 | 右侧补0值 | MySQL模式:视为字符串二进制,直接转换。 其他模式:按位字符串转换,右侧补空格。 |
BINARY | 左侧补0值 | 直接转换 | - | - |
CHAR | MySQL模式:视为字符串二进制,左侧补0值。 其他模式:按位字符串解析,右侧补0值。 | MySQL模式:视为字符串二进制,直接转换。 其他模式:按位字符串解析,直接转换 | - |
- 源数据位数大于目标数据所需位数
来源\目标 | BIT | VARBIT | BINARY | CHAR |
---|---|---|---|---|
BIT | 右侧截断 | 右侧截断 | 右侧截断 | MySQL模式:视为字符串二进制,右侧截断。 其他模式:按位字符串转换,右侧截断。 |
VARBIT | 右侧截断 | 右侧截断 | 右侧截断 | MySQL模式:视为字符串二进制,右侧截断。 其他模式:按位字符串转换,右侧截断。 |
BINARY | 报错超长 | 报错超长 | - | - |
CHAR | MySQL模式:报错超长。 其他模式:按位字符串解析,右侧截断。 | MySQL模式:报错超长。 其他模式:按位字符串解析,右侧截断。 | - | - |
位运算符
运算表达式 | 结果类型 | 说明 |
---|---|---|
VARBIT & VARBIT | VARBIT | 按位与 |
VARBIT | VARBIT | VARBIT | 按位与 |
VARBIT ^ VARBIT | VARBIT | 按位异或 |
~ VARBIT | VARBIT | 按位取反 |
VARBIT <<INTEGER | VARBIT | 左移位 |
VARBIT >>INTEGER | VARBIT | 右移位 |
提示
- 以上表达式中任意操作数为NULL,结果为NULL。
- 当位运算操作数长度不等时,将右对齐,左侧补0值,再进行位比较。
<<
、>>
移位运算符与存储过程的<<ColumnName>>
标签在语法上存在冲突,不允许连续的移位运算表达式。如SELECT B'1'>>1>>1
。如需使用连续移位运算符,可通过括号实现:SELECT (B'1'>>1)>>1
。