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.2 獲取有關位串常量的語法的信息.還有一些位邏輯操作符和位處理函數可用; 見Chapter 9

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