位串类型 ============== 位串就是一串 1 和 0 的串。它们可以用于存储和可视化位掩码。我们有两种类型的 SQL 位类型:\ ``bit(n``)和\ ``bit varying(n``),其中 *``n``*\ 是一个正整数。 ``bit``\ 类型的数据必须准确匹配长度\ *``n``*; 试图存储短些或者长一些的位串都是错误的。\ ``bit varying``\ 数据是最长\ *``n``*\ 的变长类型,更长的串会被拒绝。写一个没有长度的\ ``bit``\ 等效于 ``bit(1)``\ ,没有长度的\ ``bit varying``\ 意味着没有长度限制。 .. note:: .. rubric:: 注意 :name: 注意 :class: title 如果我们显式地把一个位串值转换成\ ``bit(n``), 那么它的右边将被截断或者在右边补齐零,直到刚好\ *``n``*\ 位, 而且不会抛出任何错误。类似地,如果我们显式地把一个位串数值转换成\ ``bit varying(n``),如果它超过了\ *``n``*\ 位, 那么它的右边将被截断。 请参考\ `节 `__\ 获取有关位串常量的语法的信息。还有一些位逻辑操作符和串操作函数可用,请见\ `节 `__\ 。 .. container:: example :name: id-1.5.7.18.7 **例 使用位串类型** .. container:: example-contents .. code:: programlisting 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位的组需要一个字节,外加总共5个或8个字节,这取决于串的长度(但是长值可能被压缩或者移到线外,如\ `节 `__\ 中对字符串的解释一样)。