Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

8.10. 位字符串类型 #

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

bit 类型数据必须与长度 n 精确匹配;尝试存储更短或更长的位字符串将出错。 bit varying 数据可变长,最长长度为 n;更长的字符串将被拒绝。如果不带长度写入 bit,则等同于 bit(1),而不带长度说明写入 bit varying 则表示长度不受限制。

注意

如果明确地将位字符串值强制转换为 bit(n),那么它将在右侧被截断或零填充,以便恰好为 n 位,而不会引发错误。类似地,如果明确地将位字符串值强制转换为 bit varying(n),那么如果该值多于 n 位,将在右侧被截断。

请参阅 第 4.1.2.5 节,了解有关位字符串常量语法的相关信息。提供了位逻辑运算符和字符串处理函数;请参阅 第 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 个字节的开销(具体取决于字符串的长度),但这对于长值可能被压缩或移出范围之外(如针对字符字符串在 第 8.3 节 中所解释的)。