5.9. 位串类型

位串就是一串 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 位, 那么它的右边将被截断。

注意: PostgreSQL7.2 之前,不管是否有明确的转换, BIT 都会在右边自动截断或者在 在右边填充零的.这个行为现在已经为了和SQL标准兼容修改过来了.

请参考 Section 1.1.2.2 获取有关位串常量的语法的信息.还有一些位逻辑操作符和位处理函数可用; 见Chapter 6

Example 5-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