更新时间:2025-09-12 GMT+08:00
分享

位串类型

位串就是一串由1和0组成的字符串。它们可以用于存储位掩码。M-Compatibility支持的位串类型请参见表1

表1 位串类型

名称

描述

存储空间

BIT[(n)]

位串就是一串由1和0组成的字符串。它们可以用于存储位掩码。 n是指位串长度, 取值范围为[1,64],如不带精度n,默认精度为1。

最大为64字节。

  • 如果用户明确地把一个位串值转换成BIT(n),则此位串右边的内容将被截断或者在右边补齐零,直到刚好n位,而不会返回出任何错误。
  • 如果用户输出位串值,将会把原有数据的位串值以字符串形式输出。参见示例
  • BIT类型支持位串输入和普通字符串输入。参见示例
  • sql_mode参数值包含“strict_trans_tables”时,非法输入或者超过范围会报错,不包含时非法输入或者超过范围存入当前长度的最大值。
  • JDBC&&PBE场景下通过setBytes或setBinaryStream向BIT列插入数据时,如果字节流不是4字节对齐的。M-Compatibility中会因为数据不完整,无法成功插入并提示报错。使用setString方法替代setBytes方法。

示例

显示用字符串输出位串类型。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
--创建表。
m_db=# CREATE TABLE bit_type_t1
(
    BIT_COL BIT(64)
);

-- 插入数据。
m_db=# INSERT INTO bit_type_t1 VALUES (b'101');

-- 查询表中数据。
m_db=# SELECT *  FROM bit_type_t1;
 bit_col 
---------
 101
(1 row)

--删除表。
m_db=# DROP TABLE bit_type_t1;

--创建表。
m_db=# CREATE TABLE bit_type_t2
(
    BIT_COL BIT(3)
);

--严格模式下插入的数据长度超过类型规定的长度报错。
m_db=# SET SQL_MODE = 'strict_trans_tables,only_full_group_by,no_zero_in_date,no_zero_date,error_for_division_by_zero,
no_auto_create_user,no_engine_substitution';
SET
m_db=# INSERT INTO bit_type_t2 VALUES (b'10101');
ERROR:  bit string too long for type bit varying(3)
CONTEXT:  referenced column: bit_col

--宽松模式下插入的数据长度超过类型规定的长度提示warning,数据取长度内最大值插入。
m_db=# SET SQL_MODE = '';
SET
m_db=# INSERT INTO bit_type_t2 VALUES (b'10101');
WARNING:  bit string too long for type bit varying(3)
CONTEXT:  referenced column: bit_col
INSERT 0 1

--查询表中的数据。
m_db=# SELECT * FROM bit_type_t2;
 bit_col 
---------
 111
(1 row)

--删除表。
m_db=# DROP TABLE bit_type_t2;

相关文档