# 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(
```

and
*
n
*
)

```
bit
varying(
```*
*```
n
```

)

, where
*is a positive integer.*

```
n
```

```
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
*; longer strings will be rejected. Writing*

```
n
```

```
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(
```

, 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*

```
n
```

```
bit varying(
```*
*```
n
```

)

, it will be truncated
on the right if it is more than
*bits.*

```
n
```

Refer to Section 4.1.2.5 for information about the syntax of bit string constants. Bit-logical operators and string manipulation functions are available; see Section 9.6 .

**
Example 8.3. 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 for character strings).