Skip to content

BIT数据类型

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

定长位类型

语法格式:

BIT[(SIZE)]

定长位类型位数固定。

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

变长位类型

语法格式:

BIT VARYING[(SIZE)]

VARBIT[(SIZE)]

变长位类型位数可变。

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

类型转换

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

源数据位数等于目标数据所需位数

来源 \ 目标BITVARBITBINARYCHAR
BIT直接转换直接转换直接转换
  • MySQL兼容模式: 视为字符串二进制,直接转换
  • 其他兼容模式: 按位字符串转换,直接转换
  • VARBIT直接转换直接转换直接转换
  • MySQL兼容模式: 视为字符串二进制,直接转换
  • 其他兼容模式: 按位字符串转换,直接转换
  • BINARY直接转换直接转换--
    CHAR
  • MySQL兼容模式: 视为字符串二进制,直接转换
  • 其他兼容模式: 按位字符串解析,直接转换
  • MySQL兼容模式: 视为字符串二进制,直接转换
  • 其他兼容模式: 按位字符串解析,直接转换
  • --

    源数据位数小于目标数据所需位数

    来源 \ 目标BITVARBITBINARYCHAR
    BIT右侧补0值直接转换右侧补0值
  • MySQL兼容模式: 视为字符串二进制,直接转换
  • 其他兼容模式: 按位字符串转换,右侧补空格
  • VARBIT右侧补0值直接转换右侧补0值
  • MySQL兼容模式: 视为字符串二进制,直接转换
  • 其他兼容模式: 按位字符串转换,右侧补空格
  • BINARY左侧补0值直接转换--
    CHAR
  • MySQL兼容模式: 视为字符串二进制,左侧补0值
  • 其他兼容模式: 按位字符串解析,右侧补0值
  • MySQL兼容模式: 视为字符串二进制,直接转换
  • 其他兼容模式: 按位字符串解析,直接转换
  • --

    源数据位数大于目标数据所需位数

    来源 \ 目标BITVARBITBINARYCHAR
    BIT右侧截断右侧截断右侧截断
  • MySQL兼容模式: 视为字符串二进制,右侧截断
  • 其他兼容模式: 按位字符串转换,右侧截断
  • VARBIT右侧截断右侧截断右侧截断
  • MySQL兼容模式: 视为字符串二进制,右侧截断
  • 其他兼容模式: 按位字符串转换,右侧截断
  • BINARY报错超长报错超长--
    CHAR
  • MySQL兼容模式: 报错超长
  • 其他兼容模式: 按位字符串解析,右侧截断
  • MySQL兼容模式: 报错超长
  • 其他兼容模式: 按位字符串解析,右侧截断
  • --

    字面量语法

    位类型字面量语法如下(以位数为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