> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wirekite.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Db2

> This page explains how data types are mapped from a source IBM Db2 (LUW) database to the target databases. See the [Db2 Data Types documentation](https://www.ibm.com/docs/en/db2/11.5?topic=elements-data-types) for a primer on the various Db2 datatypes.

### Mapping

The following tables explain how Db2 source datatypes are mapped to each target database. Wirekite extracts data from Db2, converts it to an internal type representation, then maps to the appropriate target type.

<Note>
  Wirekite reads column metadata from the `SYSCAT.COLUMNS` catalog view. Unquoted Db2 identifiers are folded to uppercase in the catalog; Wirekite lowercases table and column names on output.
</Note>

<Warning>
  **CDC (Replicate) type coverage is narrower than the initial data load.** The types below marked † extract correctly during a one-time **Data** load but are **not decodable from the Db2 recovery log** during **Replicate** (CDC). A tracked table with one of these columns will lose that column — and every column after it — in the change stream. The affected types are `DECFLOAT`, `GRAPHIC`, `VARGRAPHIC`, `LONG VARGRAPHIC`, `DBCLOB`, and `LONG VARCHAR`. Avoid them on tables you replicate, or keep them last in column order.
</Warning>

#### Numeric Types

| Db2          | PostgreSQL         | MySQL      | SQL Server | Oracle          | Firebolt  | Snowflake | Spanner   | BigQuery  | SingleStore | Databricks |
| ------------ | ------------------ | ---------- | ---------- | --------------- | --------- | --------- | --------- | --------- | ----------- | ---------- |
| `SMALLINT`   | `smallint`         | `SMALLINT` | `SMALLINT` | `NUMBER(38)`    | `INTEGER` | `number`  | `INT64`   | `INT64`   | `SMALLINT`  | `SMALLINT` |
| `INTEGER`    | `integer`          | `INT`      | `INT`      | `NUMBER(38)`    | `INTEGER` | `int`     | `INT64`   | `INT64`   | `INT`       | `INT`      |
| `BIGINT`     | `bigint`           | `BIGINT`   | `BIGINT`   | `NUMBER(38)`    | `BIGINT`  | `bigint`  | `INT64`   | `INT64`   | `BIGINT`    | `BIGINT`   |
| `DECIMAL`    | `numeric`          | `NUMERIC`  | `NUMERIC`  | `NUMBER`        | `NUMERIC` | `number`  | `NUMERIC` | `NUMERIC` | `NUMERIC`   | `DECIMAL`  |
| `NUMERIC`    | `numeric`          | `NUMERIC`  | `NUMERIC`  | `NUMBER`        | `NUMERIC` | `number`  | `NUMERIC` | `NUMERIC` | `NUMERIC`   | `DECIMAL`  |
| `REAL`       | `real`             | `FLOAT`    | `REAL`     | `BINARY_FLOAT`  | `DOUBLE`  | `float`   | `FLOAT32` | `FLOAT64` | `FLOAT`     | `FLOAT`    |
| `DOUBLE`     | `double precision` | `DOUBLE`   | `FLOAT`    | `BINARY_DOUBLE` | `DOUBLE`  | `float`   | `FLOAT64` | `FLOAT64` | `DOUBLE`    | `DOUBLE`   |
| `DECFLOAT` † | `double precision` | `DOUBLE`   | `FLOAT`    | `BINARY_DOUBLE` | `DOUBLE`  | `float`   | `FLOAT64` | `FLOAT64` | `DOUBLE`    | `DOUBLE`   |

<Note>
  `DECIMAL`/`NUMERIC` carry their precision and scale through to the target. Db2's maximum `DECIMAL` precision is 31; a source column with higher precision is capped at 31 when Db2 is the **target**. `DECFLOAT` is decimal floating-point with no fixed scale, so it maps to a 64-bit float rather than a fixed `NUMERIC(p,s)`.
</Note>

#### Boolean Type

| Db2       | PostgreSQL | MySQL        | SQL Server | Oracle    | Firebolt  | Snowflake | Spanner | BigQuery | SingleStore  | Databricks |
| --------- | ---------- | ------------ | ---------- | --------- | --------- | --------- | ------- | -------- | ------------ | ---------- |
| `BOOLEAN` | `boolean`  | `TINYINT(1)` | `BIT`      | `CHAR(1)` | `BOOLEAN` | `boolean` | `BOOL`  | `BOOL`   | `TINYINT(1)` | `BOOLEAN`  |

#### Character Types

| Db2                  | PostgreSQL          | MySQL      | SQL Server     | Oracle     | Firebolt | Snowflake | Spanner  | BigQuery | SingleStore | Databricks |
| -------------------- | ------------------- | ---------- | -------------- | ---------- | -------- | --------- | -------- | -------- | ----------- | ---------- |
| `CHAR` / `CHARACTER` | `character`         | `CHAR`     | `CHAR`         | `CHAR`     | `TEXT`   | `varchar` | `STRING` | `STRING` | `CHAR`      | `STRING`   |
| `VARCHAR`            | `character varying` | `VARCHAR`  | `VARCHAR`      | `VARCHAR2` | `TEXT`   | `varchar` | `STRING` | `STRING` | `VARCHAR`   | `STRING`   |
| `LONG VARCHAR` †     | `character varying` | `VARCHAR`  | `VARCHAR`      | `VARCHAR2` | `TEXT`   | `varchar` | `STRING` | `STRING` | `VARCHAR`   | `STRING`   |
| `CLOB`               | `text`              | `LONGTEXT` | `VARCHAR(MAX)` | `CLOB`     | `TEXT`   | `varchar` | `STRING` | `STRING` | `LONGTEXT`  | `STRING`   |

#### Graphic (Double-Byte) Types

| Db2                 | PostgreSQL          | MySQL      | SQL Server     | Oracle     | Firebolt | Snowflake | Spanner  | BigQuery | SingleStore | Databricks |
| ------------------- | ------------------- | ---------- | -------------- | ---------- | -------- | --------- | -------- | -------- | ----------- | ---------- |
| `GRAPHIC` †         | `character`         | `CHAR`     | `CHAR`         | `CHAR`     | `TEXT`   | `varchar` | `STRING` | `STRING` | `CHAR`      | `STRING`   |
| `VARGRAPHIC` †      | `character varying` | `VARCHAR`  | `VARCHAR`      | `VARCHAR2` | `TEXT`   | `varchar` | `STRING` | `STRING` | `VARCHAR`   | `STRING`   |
| `LONG VARGRAPHIC` † | `character varying` | `VARCHAR`  | `VARCHAR`      | `VARCHAR2` | `TEXT`   | `varchar` | `STRING` | `STRING` | `VARCHAR`   | `STRING`   |
| `DBCLOB` †          | `text`              | `LONGTEXT` | `VARCHAR(MAX)` | `CLOB`     | `TEXT`   | `varchar` | `STRING` | `STRING` | `LONGTEXT`  | `STRING`   |

<Note>
  Db2 graphic (DBCS) types store Unicode text and fold to the same internal representation as their character counterparts (`GRAPHIC`→`CHAR`, `VARGRAPHIC`→`VARCHAR`, `DBCLOB`→`CLOB`). On a UTF-8 database the values are preserved through the initial load. They are not supported by CDC — see the warning above.
</Note>

#### Binary Types

| Db2         | PostgreSQL | MySQL       | SQL Server       | Oracle | Firebolt | Snowflake | Spanner | BigQuery | SingleStore | Databricks |
| ----------- | ---------- | ----------- | ---------------- | ------ | -------- | --------- | ------- | -------- | ----------- | ---------- |
| `BINARY`    | `bytea`    | `BINARY`    | `BINARY`         | `RAW`  | `BYTEA`  | `binary`  | `BYTES` | `BYTES`  | `BINARY`    | `BINARY`   |
| `VARBINARY` | `bytea`    | `VARBINARY` | `VARBINARY`      | `RAW`  | `BYTEA`  | `binary`  | `BYTES` | `BYTES`  | `VARBINARY` | `BINARY`   |
| `BLOB`      | `bytea`    | `BLOB`      | `VARBINARY(MAX)` | `BLOB` | `BYTEA`  | `binary`  | `BYTES` | `BYTES`  | `BLOB`      | `BINARY`   |

#### Date and Time Types

| Db2         | PostgreSQL                    | MySQL         | SQL Server  | Oracle         | Firebolt    | Snowflake       | Spanner     | BigQuery   | SingleStore   | Databricks      |
| ----------- | ----------------------------- | ------------- | ----------- | -------------- | ----------- | --------------- | ----------- | ---------- | ------------- | --------------- |
| `DATE`      | `date`                        | `DATE`        | `DATE`      | `DATE`         | `DATE`      | `date`          | `DATE`      | `DATE`     | `DATE`        | `DATE`          |
| `TIME`      | `time without time zone`      | `TIME(6)`     | `TIME`      | `VARCHAR2(64)` | `TEXT`      | `time`          | `STRING`    | `TIME`     | `TIME(6)`     | `STRING`        |
| `TIMESTAMP` | `timestamp without time zone` | `DATETIME(6)` | `DATETIME2` | `TIMESTAMP`    | `TIMESTAMP` | `timestamp_ntz` | `TIMESTAMP` | `DATETIME` | `DATETIME(6)` | `TIMESTAMP_NTZ` |

<Note>
  Db2 `TIME` has no sub-second precision. `TIMESTAMP` supports fractional seconds up to 12 digits; Wirekite preserves microsecond precision (`.FF6`) on the wire.
</Note>

#### Other Types

| Db2                | PostgreSQL          | MySQL     | SQL Server | Oracle     | Firebolt | Snowflake | Spanner  | BigQuery | SingleStore | Databricks |
| ------------------ | ------------------- | --------- | ---------- | ---------- | -------- | --------- | -------- | -------- | ----------- | ---------- |
| `XML`              | `xml`               | `TEXT`    | `XML`      | `CLOB`     | `TEXT`   | `varchar` | `STRING` | `STRING` | `TEXT`      | `STRING`   |
| `(Any other type)` | `character varying` | `VARCHAR` | `VARCHAR`  | `VARCHAR2` | `TEXT`   | `varchar` | `STRING` | `STRING` | `VARCHAR`   | `STRING`   |

<Note>
  Any Db2 type not listed above (for example `ROWID`, `TIMESTAMP WITH TIME ZONE`, or `CHAR FOR BIT DATA`) falls back to a wide character type on the initial load, with a warning logged. These fallback types are not supported by CDC.
</Note>
