BIT

Warning:
Cockroach Labs will stop providing Assistance Support for this version on May 10, 2022. Prior to that date, upgrade to a more recent version to continue receiving support. For more details, see the Release Support Policy.

The BIT and VARBIT data types stores bit arrays. With BIT, the length is fixed; with VARBIT, the length can be variable.

Aliases

The name BIT VARYING is an alias for VARBIT.

Syntax

Bit array constants are expressed as literals. For example, B'100101' denotes an array of 6 bits.

For more information about bit array constants, see the constants documentation on bit array literals.

For usage, see the Example below.

Size

The number of bits in a BIT value is determined as follows:

Type declaration Logical size
BIT 1 bit
BIT(N) N bits
VARBIT variable with no maximum
VARBIT(N) variable with a maximum of N bits

The effective size of a BIT value is larger than its logical number of bits by a bounded constant factor. Internally, CockroachDB stores bit arrays in increments of 64 bits plus an extra integer value to encode the length.

The total size of a BIT value can be arbitrarily large, but it is recommended to keep values under 1 MB to ensure performance. Above that threshold, write amplification and other considerations may cause significant performance degradation.

Example

icon/buttons/copy
> CREATE TABLE b (x BIT, y BIT(3), z VARBIT, w VARBIT(3));
icon/buttons/copy
> SHOW COLUMNS FROM b;
  column_name | data_type | is_nullable | column_default | generation_expression |  indices  | is_hidden
+-------------+-----------+-------------+----------------+-----------------------+-----------+-----------+
  x           | BIT       |    true     | NULL           |                       | {}        |   false
  y           | BIT(3)    |    true     | NULL           |                       | {}        |   false
  z           | VARBIT    |    true     | NULL           |                       | {}        |   false
  w           | VARBIT(3) |    true     | NULL           |                       | {}        |   false
  rowid       | INT       |    false    | unique_rowid() |                       | {primary} |   true
icon/buttons/copy
> INSERT INTO b(x, y, z, w) VALUES (B'1', B'101', B'1', B'1');
icon/buttons/copy
> SELECT * FROM b;
  x |  y  | z | w
+---+-----+---+---+
  1 | 101 | 1 | 1

For type BIT, the value must match exactly the specified size:

icon/buttons/copy
> INSERT INTO b(x) VALUES (B'101');
pq: bit string length 3 does not match type BIT
icon/buttons/copy
> INSERT INTO b(y) VALUES (B'10');
pq: bit string length 2 does not match type BIT(3)

For type VARBIT, the value must not be larger than the specified maximum size:

icon/buttons/copy
> INSERT INTO b(w) VALUES (B'1010');
pq: bit string length 4 too large for type VARBIT(3)

Supported casting and conversion

BIT values can be cast to any of the following data types:

Type Details
INT Converts the bit array to the corresponding numeric value, interpreting the bits as if the value was encoded using two's complement. If the bit array is larger than the integer type, excess bits on the left are ignored. For example, B'1010'::INT equals 10.
STRING Prints out the binary digits as a string. This recovers the literal representation. For example, B'1010'::STRING equals '1010'.

See also

Data Types

YesYes NoNo