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。
Example 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');
<samp class="literal">ERROR: bit string length 2 does not match type bit(3)</samp>
INSERT INTO test VALUES (B'10'::bit(3), B'101');
SELECT * FROM test;
<samp class="literal">a | b
-----+-----
101 | 00
100 | 101</samp>
位字符串值需要1字节,每组8位,增加5或8字节的开销取决于字符串的长度 (但是长值会被压缩或移动到另外一条线上, Section 8.3中有相关字符串的解释)。