bit类型的数据必须准确匹配长度n; 试图存储短些或者长一些的数据都是错误的。类型 bit varying 数据是最长 n 的变长类型; 更长的串会被拒绝。写一个没有长度的 bit 等效于 bit(1),没有长度的bit varying 意思是没有长度限制。
注意:如果我们明确地把一个位串值转换成 bit(n), 那么它的右边将被截断或者在右边补齐零,直到刚好 n 位, 而不会抛出任何错误。类似地,如果我们明确地把一个位串数值转换成 bit varying(n),如果它超过了n 位, 那么它的右边将被截断。
注意:在PostgreSQL7.2 之前,不管是否有明确的转换, bit 都会在右边自动截断或者在在右边填充零的。这个行为现在已经为了和SQL标准兼容修改过来了。
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