8.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 4.1.2.3 獲取有關位串常量的語法的訊息。還有一些位邏輯操作符和位處理函數可用; 見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');
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