The @mionkit/drizzle package automatically maps TypeScript types to appropriate Drizzle ORM column definitions. This mapping is database-aware, using native column types where available (e.g., PostgreSQL's uuid() and inet()) and falling back to compatible alternatives for databases with fewer native types (e.g., SQLite uses text() for most string formats).
Type formats from @mionkit/type-formats provide additional semantic information that enables more precise column mapping. For example, NumInteger maps to an integer column rather than a floating-point column, and StrEmail uses the appropriate varchar length for email addresses.
| TypeScript Type | PostgreSQL | MySQL | SQLite |
|---|---|---|---|
string | varchar(255) | varchar(255) | text() |
number | doublePrecision() | double() | real() |
boolean | boolean() | boolean() | integer({mode: 'boolean'}) |
bigint | bigint({mode: 'bigint'}) | bigint({mode: 'bigint'}) | blob({mode: 'bigint'}) |
Date | timestamp() | timestamp() | integer({mode: 'timestamp'}) |
| Format Type | PostgreSQL | MySQL | SQLite |
|---|---|---|---|
StrUUID / StrUUIDv7 | uuid() | varchar(36) | text() |
StrEmail | varchar(254) | varchar(254) | text() |
StrURL | varchar(2048) | varchar(2048) | text() |
StrDomain | varchar(253) | varchar(253) | text() |
StrIP / StrIPv4 / StrIPv6 | inet() | varchar(45) | text() |
StrDateTime | timestamp() | datetime() | text() |
StrDate | date() | date() | text() |
StrTime | time() | time() | text() |
StrFormat (with maxLength) | varchar(maxLength * buffer) | varchar(maxLength * buffer) | text() |
Well-known formats like StrEmail, StrURL, and StrDomain use their standard maximum lengths without any buffer applied.
All number formats with the integer: true parameter map to integer columns, while formats with float: true or no integer constraint map to floating-point columns.
| Format Type | Description | PostgreSQL | MySQL | SQLite |
|---|---|---|---|---|
NumInteger | Generic integer | integer() | int() | integer() |
NumFloat | Generic float | doublePrecision() | double() | real() |
NumPositive | Number >= 0 | doublePrecision() | double() | real() |
NumNegative | Number <= 0 | doublePrecision() | double() | real() |
NumPositiveInt | Integer >= 0 | integer() | int() | integer() |
NumNegativeInt | Integer <= 0 | integer() | int() | integer() |
NumInt8 | 8-bit signed (-128 to 127) | integer() | int() | integer() |
NumInt16 | 16-bit signed (-32768 to 32767) | integer() | int() | integer() |
NumInt32 | 32-bit signed | integer() | int() | integer() |
NumUInt8 | 8-bit unsigned (0 to 255) | integer() | int() | integer() |
NumUInt16 | 16-bit unsigned (0 to 65535) | integer() | int() | integer() |
NumUInt32 | 32-bit unsigned (0 to 4294967295) | integer() | int() | integer() |
| Format Type | PostgreSQL | MySQL | SQLite |
|---|---|---|---|
BigNumFormat | bigint({mode: 'bigint'}) | bigint({mode: 'bigint'}) | blob({mode: 'bigint'}) |
| TypeScript Type | PostgreSQL | MySQL | SQLite |
|---|---|---|---|
T[] (array) | jsonb() | json() | text({mode: 'json'}) |
{...} (object) | jsonb() | json() | text({mode: 'json'}) |