Dialects

Overview

Dialects absorb differences in databases and drivers. A typical function of dialects is to resolve the type mappings between Kotlin and SQL.

The classes representing dialects are contained in separate modules (artifacts), and the choice of which module to use must be based on the destination database and connectivity type.

Database Type Artifact ID Dialect Class Supported Database Version
H2 Database Engine JDBC komapper-dialect-h2-jdbc H2JdbcSqlDialect v2.2.222 and above
H2 Database Engine R2DBC komapper-dialect-h2-r2dbc H2R2dbcSqlDialect v2.2.222 and above
MariaDB JDBC komapper-dialect-mariadb-jdbc MariaDbJdbcDialect v10.6.3 and above
MariaDB R2DBC komapper-dialect-mariadb-r2dbc MariaDbR2dbcDialect v10.6.3 and above
MySQL JDBC komapper-dialect-mysql-jdbc MySqlJdbcDialect v5.7.x and v8.x
MySQL R2DBC komapper-dialect-mysql-r2dbc MySqlR2dbcDialect v5.7.x and v8.x
Oracle Database JDBC komapper-dialect-oracle-jdbc OracleJdbcDialect v18c and above
Oracle Database R2DBC komapper-dialect-oracle-r2dbc OracleR2dbcDialect v18c and above
PostgreSQL JDBC komapper-dialect-postgresql-jdbc PostgreSqlJdbcDialect v12.9 and above
PostgreSQL R2DBC komapper-dialect-postgresql-r2dbc PostgreSqlR2dbcDialect v12.9 and above
SQL Server JDBC komapper-dialect-sqlserver-jdbc SqlServerJdbcDialect v2019 and above
SQL Server R2DBC komapper-dialect-sqlserver-r2dbc SqlServerR2dbcDialect v2019 and above

To use a dialect, specify the Artifact ID above in the Gradle dependencies declaration.

val komapperVersion: String by project
dependencies {
    implementation("org.komapper:komapper-dialect-h2-jdbc:$komapperVersion")
}

H2 - JDBC

The following table shows the data type mapping:

Kotlin Type SQL Type Description
java.math.BigDecimal NUMERIC
java.math.BigInteger NUMERIC
java.sql.Array ARRAY
java.sql.Blob BLOB
java.sql.Clob CLOB
java.sql.NClob CLOB
java.sql.SQLXML CLOB
java.time.Instant TIMESTAMP WITH TIME ZONE
java.time.LocalDate DATE
java.time.LocalDateTime TIMESTAMP
java.time.LocalTime TIME
java.time.OffsetDateTime TIMESTAMP WITH TIME ZONE
java.util.UUID UUID
kotlin.Any JAVA_OBJECT
kotlin.Boolean BOOLEAN
kotlin.Byte TINYINT
kotlin.ByteArray BINARY
kotlin.Double DOUBLE
kotlin.Float REAL
kotlin.Int INT
kotlin.Long BIGINT
kotlin.Short SMALLINT
kotlin.String VARCHAR
kotlin.String CLOB ClobString must be specified as alternate type.
kotlin.UByte SMALLINT
kotlin.UInt BIGINT
kotlin.UShort INT
kotlinx.datetime.Instant TIMESTAMP WITH TIME ZONE
kotlinx.datetime.LocalDate DATE
kotlinx.datetime.LocalDateTime TIMESTAMP
enum class VARCHAR Can be customized by @KomapperEnum or komapper.enumStrategy.

H2 - R2DBC

The following table shows the data type mapping:

Kotlin Type SQL Type Description
io.r2dbc.spi.Blob BLOB
io.r2dbc.spi.Clob CLOB
java.math.BigDecimal NUMERIC
java.math.BigInteger NUMERIC
java.time.Instant TIMESTAMP WITH TIME ZONE
java.time.LocalDate DATE
java.time.LocalDateTime TIMESTAMP
java.time.LocalTime TIME
java.time.OffsetDateTime TIMESTAMP WITH TIME ZONE
java.util.UUID UUID
kotlin.Any N/A
kotlin.Boolean BOOLEAN
kotlin.Byte TINYINT
kotlin.ByteArray BINARY
kotlin.Double DOUBLE
kotlin.Float REAL
kotlin.Int INT
kotlin.Long BIGINT
kotlin.Short SMALLINT
kotlin.String VARCHAR
kotlin.String CLOB ClobString must be specified as alternate type.
kotlin.UByte SMALLINT
kotlin.UInt BIGINT
kotlin.UShort INT
kotlinx.datetime.Instant TIMESTAMP WITH TIME ZONE
kotlinx.datetime.LocalDate DATE
kotlinx.datetime.LocalDateTime TIMESTAMP
enum class VARCHAR Can be customized by @KomapperEnum or komapper.enumStrategy.

MariaDB - JDBC

The following table shows the data type mapping:

Kotlin Type SQL Type Description
java.math.BigDecimal DECIMAL
java.math.BigInteger DECIMAL
java.sql.Array N/A
java.sql.Blob BLOB
java.sql.Clob TEXT
java.sql.NClob TEXT
java.sql.SQLXML TEXT
java.time.Instant TIMESTAMP
java.time.LocalDate DATE
java.time.LocalDateTime DATETIME
java.time.LocalTime TIME
java.time.OffsetDateTime TIMESTAMP
java.util.UUID N/A
kotlin.Any N/A
kotlin.Boolean BIT(1), BOOLEAN
kotlin.Byte TINYINT
kotlin.ByteArray VARBINARY
kotlin.Double DOUBLE
kotlin.Float FLOAT
kotlin.Int INT
kotlin.Long BIGINT
kotlin.Short SMALLINT
kotlin.String VARCHAR
kotlin.String TEXT ClobString must be specified as alternate type.
kotlin.UByte SMALLINT
kotlin.UInt BIGINT
kotlin.UShort INT
kotlinx.datetime.Instant TIMESTAMP
kotlinx.datetime.LocalDate DATE
kotlinx.datetime.LocalDateTime DATETIME
enum class VARCHAR Can be customized by @KomapperEnum or komapper.enumStrategy.

MariaDB - R2DBC

The following table shows the data type mapping:

Kotlin Type SQL Type Description
io.r2dbc.spi.Blob BLOB
io.r2dbc.spi.Clob TEXT
java.math.BigDecimal DECIMAL
java.math.BigInteger DECIMAL
java.time.Instant TIMESTAMP
java.time.LocalDate DATE
java.time.LocalDateTime DATETIME
java.time.LocalTime TIME
java.time.OffsetDateTime TIMESTAMP
java.util.UUID N/A
kotlin.Any N/A
kotlin.Boolean BIT(1), BOOLEAN
kotlin.Byte TINYINT
kotlin.ByteArray VARBINARY
kotlin.Double DOUBLE
kotlin.Float FLOAT
kotlin.Int INT
kotlin.Long BIGINT
kotlin.Short SMALLINT
kotlin.String VARCHAR
kotlin.String TEXT ClobString must be specified as alternate type.
kotlin.UByte SMALLINT
kotlin.UInt BIGINT
kotlin.UShort INT
kotlinx.datetime.Instant TIMESTAMP
kotlinx.datetime.LocalDate DATE
kotlinx.datetime.LocalDateTime DATETIME
enum class VARCHAR Can be customized by @KomapperEnum or komapper.enumStrategy.

MySQL - JDBC

The MySQL Dialect in our system supports both MySQL versions 5 and 8, with the default being version 8. To instantiate a Dialect specifically for version 5, you should explicitly specify the version as follows:

val dialect = MySqlJdbcDialect(MySqlVersion.V5)

The following table shows the data type mapping:

Kotlin Type SQL Type Description
java.math.BigDecimal DECIMAL
java.math.BigInteger DECIMAL
java.sql.Array N/A
java.sql.Blob BLOB
java.sql.Clob TEXT
java.sql.NClob TEXT
java.sql.SQLXML TEXT
java.time.Instant TIMESTAMP
java.time.LocalDate DATE
java.time.LocalDateTime DATETIME
java.time.LocalTime TIME
java.time.OffsetDateTime TIMESTAMP
java.util.UUID N/A
kotlin.Any N/A
kotlin.Boolean BIT(1), BOOLEAN
kotlin.Byte TINYINT
kotlin.ByteArray VARBINARY
kotlin.Double DOUBLE
kotlin.Float FLOAT
kotlin.Int INT
kotlin.Long BIGINT
kotlin.Short SMALLINT
kotlin.String VARCHAR
kotlin.String TEXT ClobString must be specified as alternate type.
kotlin.UByte SMALLINT
kotlin.UInt BIGINT
kotlin.UShort INT
kotlinx.datetime.Instant TIMESTAMP
kotlinx.datetime.LocalDate DATE
kotlinx.datetime.LocalDateTime DATETIME
enum class VARCHAR Can be customized by @KomapperEnum or komapper.enumStrategy.

MySQL - R2DBC

The MySQL Dialect in our system supports both MySQL versions 5 and 8, with the default being version 8. To instantiate a Dialect specifically for version 5, you should explicitly specify the version as follows:

val dialect = MySqlR2dbcDialect(MySqlVersion.V5)

The following table shows the data type mapping:

Kotlin Type SQL Type Description
io.r2dbc.spi.Blob N/A
io.r2dbc.spi.Clob N/A
java.math.BigDecimal DECIMAL
java.math.BigInteger DECIMAL
java.time.Instant TIMESTAMP
java.time.LocalDate DATE
java.time.LocalDateTime DATETIME
java.time.LocalTime N/A
java.time.OffsetDateTime TIMESTAMP
java.util.UUID N/A
kotlin.Any N/A
kotlin.Boolean BIT(1), BOOLEAN
kotlin.Byte TINYINT
kotlin.ByteArray VARBINARY
kotlin.Double DOUBLE
kotlin.Float FLOAT
kotlin.Int INT
kotlin.Long BIGINT
kotlin.Short SMALLINT
kotlin.String VARCHAR
kotlin.String TEXT ClobString must be specified as alternate type.
kotlin.UByte SMALLINT
kotlin.UInt BIGINT
kotlin.UShort INT
kotlinx.datetime.Instant TIMESTAMP
kotlinx.datetime.LocalDate DATE
kotlinx.datetime.LocalDateTime DATETIME
enum class VARCHAR Can be customized by @KomapperEnum or komapper.enumStrategy.

Oracle - JDBC

The following table shows the data type mapping:

Kotlin Type SQL Type Description
java.math.BigDecimal NUMBER
java.math.BigInteger NUMBER
java.sql.Array N/A
java.sql.Blob BLOB
java.sql.Clob CLOB
java.sql.NClob N/A
java.sql.SQLXML N/A
java.time.Instant TIMESTAMP WITH TIME ZONE
java.time.LocalDate DATE
java.time.LocalDateTime TIMESTAMP
java.time.LocalTime TIME
java.time.OffsetDateTime TIMESTAMP WITH TIME ZONE
java.util.UUID N/A
kotlin.Any N/A
kotlin.Boolean NUMBER
kotlin.Byte NUMBER
kotlin.ByteArray RAW
kotlin.Double FLOAT
kotlin.Float FLOAT
kotlin.Int NUMBER
kotlin.Long NUMBER
kotlin.Short NUMBER
kotlin.String VARCHAR2
kotlin.String CLOB ClobString must be specified as alternate type.
kotlin.UByte NUMBER
kotlin.UInt NUMBER
kotlin.UShort NUMBER
kotlinx.datetime.Instant TIMESTAMP WITH TIME ZONE
kotlinx.datetime.LocalDate DATE
kotlinx.datetime.LocalDateTime TIMESTAMP
enum class VARCHAR2 Can be customized by @KomapperEnum or komapper.enumStrategy.

Oracle - R2DBC

The following table shows the data type mapping:

Kotlin Type SQL Type Description
io.r2dbc.spi.Blob BLOB
io.r2dbc.spi.Clob CLOB
java.math.BigDecimal NUMBER
java.math.BigInteger NUMBER
java.time.Duration INTERVAL DAY TO SECOND
java.time.Instant TIMESTAMP WITH TIME ZONE
java.time.LocalDate DATE
java.time.LocalDateTime TIMESTAMP
java.time.LocalTime TIME
java.time.Period INTERVAL YEAR TO MONTH
java.time.OffsetDateTime TIMESTAMP WITH TIME ZONE
java.util.UUID N/A
kotlin.Any N/A
kotlin.Boolean NUMBER
kotlin.Byte NUMBER
kotlin.ByteArray RAW
kotlin.Double FLOAT
kotlin.Float FLOAT
kotlin.Int NUMBER
kotlin.Long NUMBER
kotlin.Short NUMBER
kotlin.String VARCHAR2
kotlin.String CLOB ClobString must be specified as alternate type.
kotlin.UByte NUMBER
kotlin.UInt NUMBER
kotlin.UShort NUMBER
kotlinx.datetime.Instant TIMESTAMP WITH TIME ZONE
kotlinx.datetime.LocalDate DATE
kotlinx.datetime.LocalDateTime TIMESTAMP
enum class VARCHAR2 Can be customized by @KomapperEnum or komapper.enumStrategy.

PostgreSQL - JDBC

The following table shows the data type mapping:

Kotlin Type SQL Type Description
java.math.BigDecimal numeric, decimal
java.math.BigInteger numeric, decimal
java.sql.Array array of data type
java.sql.Blob N/A
java.sql.Clob N/A
java.sql.NClob N/A
java.sql.SQLXML xml
java.time.Instant timestamp with time zone
java.time.LocalDate date
java.time.LocalDateTime timestamp
java.time.LocalTime time
java.time.OffsetDateTime timestamp with time zone
java.util.UUID uuid
kotlin.Any N/A
kotlin.Boolean boolean, bool
kotlin.Byte smallint
kotlin.ByteArray bytea
kotlin.Double double precision, float8
kotlin.Float real
kotlin.Int integer, int, int4, serial
kotlin.Long bigint, int8, bigserial, serial8
kotlin.Short smallint, int2, smallserial, serial2
kotlin.String character varying, varchar, text
kotlin.String text ClobString must be specified as alternate type.
kotlin.UByte smallint, int2, smallserial, serial2
kotlin.UInt bigint, int8, bigserial, serial8
kotlin.UShort integer, int, int4, serial
kotlinx.datetime.Instant timestamp with time zone
kotlinx.datetime.LocalDate date
kotlinx.datetime.LocalDateTime timestamp
enum class character varying, varchar, text Can be customized by @KomapperEnum or komapper.enumStrategy.

PostgreSQL - R2DBC

The following table shows the data type mapping:

Kotlin Type SQL Type Description
io.r2dbc.postgresql.codec.Box box
io.r2dbc.postgresql.codec.Circle circle
io.r2dbc.postgresql.codec.Line line
io.r2dbc.postgresql.codec.Lseg lseg
io.r2dbc.postgresql.codec.Path path
io.r2dbc.postgresql.codec.Point point
io.r2dbc.postgresql.codec.Polygon polygon
io.r2dbc.postgresql.codec.Interval interval
io.r2dbc.postgresql.codec.Json json, jsonb
io.r2dbc.spi.Blob bytea
io.r2dbc.spi.Clob text
java.math.BigDecimal numeric, decimal
java.math.BigInteger numeric, decimal
java.time.Instant timestamp with time zone
java.time.LocalDate date
java.time.LocalDateTime timestamp
java.time.LocalTime time
java.time.OffsetDateTime timestamp with time zone
java.util.UUID uuid
kotlin.Any N/A
kotlin.Array array of data type
kotlin.Boolean boolean, bool
kotlin.Byte smallint
kotlin.ByteArray bytea
kotlin.Double double precision, float8
kotlin.Float real
kotlin.Int integer, int, int4, serial
kotlin.Long bigint, int8, bigserial, serial8
kotlin.Short smallint, int2, smallserial, serial2
kotlin.String character varying, varchar, text
kotlin.String text ClobString must be specified as alternate type.
kotlin.UByte smallint, int2, smallserial, serial2
kotlin.UInt bigint, int8, bigserial, serial8
kotlin.UShort integer, int, int4, serial
kotlinx.datetime.Instant timestamp with time zone
kotlinx.datetime.LocalDate date
kotlinx.datetime.LocalDateTime timestamp
org.locationtech.jts.geom.Geometry geometry
enum class character varying, varchar, text Can be customized by @KomapperEnum or komapper.enumStrategy.

SQL Server - JDBC

The following table shows the data type mapping:

Kotlin Type SQL Type Description
java.math.BigDecimal decimal
java.math.BigInteger decimal
java.sql.Array N/A
java.sql.Blob varbinary(max)
java.sql.Clob text
java.sql.NClob N/A
java.sql.SQLXML xml
java.time.Instant datetimeoffset
java.time.LocalDate date
java.time.LocalDateTime datetime2
java.time.LocalTime time
java.time.OffsetDateTime datetimeoffset
java.util.UUID N/A
kotlin.Any N/A
kotlin.Boolean bit
kotlin.Byte smallint, tinyint
kotlin.ByteArray varbinary
kotlin.Double float
kotlin.Float real
kotlin.Int int
kotlin.Long bigint
kotlin.Short smallint
kotlin.String varchar, nvarchar
kotlin.String text ClobString must be specified as alternate type.
kotlin.UByte smallint
kotlin.UInt bigint
kotlin.UShort int
kotlinx.datetime.Instant datetimeoffset
kotlinx.datetime.LocalDate date
kotlinx.datetime.LocalDateTime datetime2
enum class varchar, nvarchar Can be customized by @KomapperEnum or komapper.enumStrategy.

SQL Server - R2DBC

The following table shows the data type mapping:

Kotlin Type SQL Type Description
io.r2dbc.spi.Blob varbinary(max)
io.r2dbc.spi.Clob text
java.math.BigDecimal decimal
java.math.BigInteger decimal
java.time.Instant datetimeoffset
java.time.LocalDate date
java.time.LocalDateTime datetime2
java.time.LocalTime time
java.time.OffsetDateTime N/A
java.util.UUID N/A
kotlin.Any N/A
kotlin.Boolean bit
kotlin.Byte smallint, tinyint
kotlin.ByteArray varbinary
kotlin.Double float
kotlin.Float real
kotlin.Int int
kotlin.Long bigint
kotlin.Short smallint
kotlin.String varchar, nvarchar
kotlin.String text ClobString must be specified as alternate type.
kotlin.UByte smallint
kotlin.UInt bigint
kotlin.UShort int
kotlinx.datetime.Instant datetimeoffset
kotlinx.datetime.LocalDate date
kotlinx.datetime.LocalDateTime datetimev
enum class varchar, nvarchar Can be customized by @KomapperEnum or komapper.enumStrategy.