--- title: "Bit String Types" id: datatype-bit pg_version: "20devel" --- ## 8.10. Bit String Types Bit strings are strings of 1's and 0's. They can be used to store or visualize bit masks. There are two SQL bit types: `bit(n)` and `bit varying(n)`, where `n` is a positive integer. `bit` type data must match the length `n` exactly; it is an error to attempt to store shorter or longer bit strings. `bit varying` data is of variable length up to the maximum length `n`; longer strings will be rejected. Writing `bit` without a length is equivalent to `bit(1)`, while `bit varying` without a length specification means unlimited length. > [!NOTE] > If one explicitly casts a bit-string value to `bit(n)`, it will be truncated or zero-padded on the right to be exactly `n` bits, without raising an error. Similarly, if one explicitly casts a bit-string value to `bit varying(n)`, it will be truncated on the right if it is more than `n` bits. Refer to [Section 4.1.2.5](sql-syntax-lexical.md#sql-syntax-bit-strings) for information about the syntax of bit string constants. Bit-logical operators and string manipulation functions are available; see [Section 9.6](functions-bitstring.md). **Using the Bit String Types** 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 A bit string value requires 1 byte for each group of 8 bits, plus 5 or 8 bytes overhead depending on the length of the string (but long values may be compressed or moved out-of-line, as explained in [Section 8.3](datatype-character.md) for character strings).