8.10. 位字符串类型

位字符串是 1 和 0 的字符串。它们可用于存储或可视化位掩码。有两种 SQL 位类型:bit(n)bit varying(n),其中* n *是正整数。

bit类型数据必须与长度* n 完全匹配;尝试存储较短或较长的位字符串是错误的。 bit varying数据的长度可变,最大长度为 n *;较长的字符串将被拒绝。没有长度的bit等效于bit(1),而没有长度的bit varying表示长度不受限制。

Note

如果将一个位字符串值显式转换为bit(n),则它将在右边被截断或补零,以正好是* n 位,而不会引发错误。同样,如果将一个位字符串值显式转换为bit varying(n),则如果它超过 n *位,它将在右侧被截断。

有关位字符串常量的语法的信息,请参见Section 4.1.2.5。位逻辑运算符和字符串操作功能可用;参见Section 9.6

实施例 8.3. 使用位字符串类型

CREATE TABLE test (a BIT(3), b BIT VARYING(5));
INSERT INTO test VALUES (B'101', B'00');
INSERT INTO test VALUES (B'10', B'101');

ERROR:  bit string length 2 does not match type bit(3)

INSERT INTO test VALUES (B'10'::bit(3), B'101');
SELECT * FROM test;

  a  |  b
-----+-----
 101 | 00
 100 | 101

一个位字符串值需要为每个 8 位组分配 1 个字节,再加上 5 或 8 个字节的开销(取决于字符串的长度)(但是长的值可能会被压缩或移出行,如Section 8.3中关于字符串的说明) 。