2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

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 节 中对字符字符串的解释)。

提交更正

如果您在文档中发现任何不正确、不符合您对特定功能的实际经验或需要进一步说明的内容,请使用 此表格 来报告文档问题。