🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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](#calibre_link-1008)获取有关位串常量的语法信息。 还有一些位逻辑操作符和位处理函数可用;参见[Section 9.6](#calibre_link-1009)。 **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](#calibre_link-1010)中有相关字符串的解释)。