MariaDB/MySQL Type Support
Foundations JDBC provides comprehensive support for MariaDB and MySQL data types, including unsigned integers, spatial types, and MySQL-specific features.
Integer Types (Signed)
| MariaDB Type | Java Type | Range |
|---|---|---|
TINYINT | Byte | -128 to 127 |
SMALLINT | Short | -32,768 to 32,767 |
MEDIUMINT | Integer | -8,388,608 to 8,388,607 |
INT | Integer | -2,147,483,648 to 2,147,483,647 |
BIGINT | Long | -2^63 to 2^63-1 |
- Kotlin
- Java
- Scala
val tinyType: MariaType<Byte> = MariaTypes.tinyint
val intType: MariaType<Int> = MariaTypes.int_
val bigType: MariaType<Long> = MariaTypes.bigint
MariaType<Byte> tinyType = MariaTypes.tinyint;
MariaType<Integer> intType = MariaTypes.int_;
MariaType<Long> bigType = MariaTypes.bigint;
val tinyType: MariaType[Byte] = MariaTypes.tinyint
val intType: MariaType[Int] = MariaTypes.int_
val bigType: MariaType[Long] = MariaTypes.bigint
Integer Types (Unsigned)
MariaDB supports unsigned integers, which are wrapped in type-safe unsigned types:
| MariaDB Type | Java Type | Range |
|---|---|---|
TINYINT UNSIGNED | Uint1 | 0 to 255 |
SMALLINT UNSIGNED | Uint2 | 0 to 65,535 |
MEDIUMINT UNSIGNED | Uint4 | 0 to 16,777,215 |
INT UNSIGNED | Uint4 | 0 to 4,294,967,295 |
BIGINT UNSIGNED | Uint8 | 0 to 2^64-1 |
- Kotlin
- Java
- Scala
val unsignedTiny: MariaType<Uint1> = MariaTypes.tinyintUnsigned
val unsignedInt: MariaType<Uint4> = MariaTypes.intUnsigned
val unsignedBig: MariaType<Uint8> = MariaTypes.bigintUnsigned
MariaType<Uint1> unsignedTiny = MariaTypes.tinyintUnsigned;
MariaType<Uint4> unsignedInt = MariaTypes.intUnsigned;
MariaType<Uint8> unsignedBig = MariaTypes.bigintUnsigned;
val unsignedTiny: MariaType[Uint1] = MariaTypes.tinyintUnsigned
val unsignedInt: MariaType[Uint4] = MariaTypes.intUnsigned
val unsignedBig: MariaType[Uint8] = MariaTypes.bigintUnsigned
Fixed-Point Types
| MariaDB Type | Java Type | Notes |
|---|---|---|
DECIMAL(p,s) | BigDecimal | Exact numeric |
NUMERIC(p,s) | BigDecimal | Alias for DECIMAL |
- Kotlin
- Java
- Scala
val decimalType: MariaType<BigDecimal> = MariaTypes.decimal
val preciseDecimal: MariaType<BigDecimal> = MariaTypes.decimal(10, 2)
MariaType<BigDecimal> decimalType = MariaTypes.decimal;
MariaType<BigDecimal> preciseDecimal = MariaTypes.decimal(10, 2);
val decimalType: MariaType[BigDecimal] = MariaTypes.decimal
val preciseDecimal: MariaType[BigDecimal] = MariaTypes.decimal(10, 2)
Floating-Point Types
| MariaDB Type | Java Type | Notes |
|---|---|---|
FLOAT | Float | 32-bit IEEE 754 |
DOUBLE | Double | 64-bit IEEE 754 |
- Kotlin
- Java
- Scala
val floatType: MariaType<Float> = MariaTypes.float_
val doubleType: MariaType<Double> = MariaTypes.double_
MariaType<Float> floatType = MariaTypes.float_;
MariaType<Double> doubleType = MariaTypes.double_;
val floatType: MariaType[Float] = MariaTypes.float_
val doubleType: MariaType[Double] = MariaTypes.double_
Boolean Type
| MariaDB Type | Java Type | Notes |
|---|---|---|
BOOLEAN / BOOL | Boolean | Alias for TINYINT(1) |
BIT(1) | Boolean | Single bit as boolean |
- Kotlin
- Java
- Scala
val boolType: MariaType<Boolean> = MariaTypes.bool
val bitBool: MariaType<Boolean> = MariaTypes.bit1
MariaType<Boolean> boolType = MariaTypes.bool;
MariaType<Boolean> bitBool = MariaTypes.bit1;
val boolType: MariaType[Boolean] = MariaTypes.bool
val bitBool: MariaType[Boolean] = MariaTypes.bit1
Bit Types
| MariaDB Type | Java Type | Notes |
|---|---|---|
BIT(n) | byte[] | Bit field (n > 1) |
- Kotlin
- Java
- Scala
val bitType: MariaType<ByteArray> = MariaTypes.bit
MariaType<byte[]> bitType = MariaTypes.bit;
val bitType: MariaType[Array[Byte]] = MariaTypes.bit
String Types
| MariaDB Type | Java Type | Max Length |
|---|---|---|
CHAR(n) | String | 255 chars |
VARCHAR(n) | String | 65,535 bytes |
TINYTEXT | String | 255 bytes |
TEXT | String | 65,535 bytes |
MEDIUMTEXT | String | 16 MB |
LONGTEXT | String | 4 GB |
- Kotlin
- Java
- Scala
val charType: MariaType<String> = MariaTypes.char_(10)
val varcharType: MariaType<String> = MariaTypes.varchar(255)
val textType: MariaType<String> = MariaTypes.text
val longType: MariaType<String> = MariaTypes.longtext
MariaType<String> charType = MariaTypes.char_(10);
MariaType<String> varcharType = MariaTypes.varchar(255);
MariaType<String> textType = MariaTypes.text;
MariaType<String> longType = MariaTypes.longtext;
val charType: MariaType[String] = MariaTypes.char_(10)
val varcharType: MariaType[String] = MariaTypes.varchar(255)
val textType: MariaType[String] = MariaTypes.text
val longType: MariaType[String] = MariaTypes.longtext
Binary Types
| MariaDB Type | Java Type | Max Length |
|---|---|---|
BINARY(n) | byte[] | Fixed n bytes |
VARBINARY(n) | byte[] | Up to n bytes |
TINYBLOB | byte[] | 255 bytes |
BLOB | byte[] | 65,535 bytes |
MEDIUMBLOB | byte[] | 16 MB |
LONGBLOB | byte[] | 4 GB |
- Kotlin
- Java
- Scala
val binaryType: MariaType<ByteArray> = MariaTypes.binary(16)
val varbinaryType: MariaType<ByteArray> = MariaTypes.varbinary(255)
val blobType: MariaType<ByteArray> = MariaTypes.blob
MariaType<byte[]> binaryType = MariaTypes.binary(16);
MariaType<byte[]> varbinaryType = MariaTypes.varbinary(255);
MariaType<byte[]> blobType = MariaTypes.blob;
val binaryType: MariaType[Array[Byte]] = MariaTypes.binary(16)
val varbinaryType: MariaType[Array[Byte]] = MariaTypes.varbinary(255)
val blobType: MariaType[Array[Byte]] = MariaTypes.blob
Date/Time Types
| MariaDB Type | Java Type | Notes |
|---|---|---|
DATE | LocalDate | Date only |
TIME | LocalTime | Time only |
DATETIME | LocalDateTime | Date and time |
TIMESTAMP | LocalDateTime | With auto-update |
YEAR | Year | 4-digit year |
- Kotlin
- Java
- Scala
val dateType: MariaType<LocalDate> = MariaTypes.date
val timeType: MariaType<LocalTime> = MariaTypes.time
val datetimeType: MariaType<LocalDateTime> = MariaTypes.datetime
val yearType: MariaType<Year> = MariaTypes.year
// With fractional seconds precision
val timeFsp: MariaType<LocalTime> = MariaTypes.time(6)
val dtFsp: MariaType<LocalDateTime> = MariaTypes.datetime(3)
MariaType<LocalDate> dateType = MariaTypes.date;
MariaType<LocalTime> timeType = MariaTypes.time;
MariaType<LocalDateTime> datetimeType = MariaTypes.datetime;
MariaType<Year> yearType = MariaTypes.year;
// With fractional seconds precision
MariaType<LocalTime> timeFsp = MariaTypes.time(6);
MariaType<LocalDateTime> dtFsp = MariaTypes.datetime(3);
val dateType: MariaType[LocalDate] = MariaTypes.date
val timeType: MariaType[LocalTime] = MariaTypes.time
val datetimeType: MariaType[LocalDateTime] = MariaTypes.datetime
val yearType: MariaType[Year] = MariaTypes.year
// With fractional seconds precision
val timeFsp: MariaType[LocalTime] = MariaTypes.time(6)
val dtFsp: MariaType[LocalDateTime] = MariaTypes.datetime(3)
ENUM Type
| MariaDB Type | Java Type |
|---|---|
ENUM('a','b','c') | Java Enum |
- Kotlin
- Java
- Scala
// Define your Kotlin enum
enum class Status { PENDING, ACTIVE, COMPLETED }
// Create MariaType for it
val statusType: MariaType<Status> = MariaTypes.ofEnum("status", Status::valueOf)
// Define your Java enum
public enum Status { PENDING, ACTIVE, COMPLETED }
// Create MariaType for it
MariaType<Status> statusType = MariaTypes.ofEnum("status", Status::valueOf);
// Define your Scala 3 enum
enum Status:
case PENDING, ACTIVE, COMPLETED
// Create a MariaType using transform (Scala 3 enums don't extend java.lang.Enum)
val statusType: MariaType[Status] = MariaTypes.text.transform(
Status.valueOf,
_.toString
)
SET Type
| MariaDB Type | Java Type |
|---|---|
SET('a','b','c') | MariaSet |
- Kotlin
- Java
- Scala
val setType: MariaType<MariaSet> = MariaTypes.set
// Create and use sets
val values: MariaSet = MariaSet.of("read", "write")
val csv: String = values.toCommaSeparated()
MariaType<MariaSet> setType = MariaTypes.set;
// Create and use sets
MariaSet values = MariaSet.of("read", "write");
String csv = values.toCommaSeparated();
val setType: MariaType[MariaSet] = MariaTypes.set
// Create and use sets
val values: MariaSet = MariaSet.of("read", "write")
val csv: String = values.toCommaSeparated()
JSON Type
| MariaDB Type | Java Type |
|---|---|
JSON | Json |
- Kotlin
- Java
- Scala
val jsonType: MariaType<Json> = MariaTypes.json
val data: Json = Json("{\"name\": \"John\", \"age\": 30}")
MariaType<Json> jsonType = MariaTypes.json;
Json data = new Json("{\"name\": \"John\", \"age\": 30}");
val jsonType: MariaType[Json] = MariaTypes.json
val data: Json = new Json("{\"name\": \"John\", \"age\": 30}")
Network Types (MariaDB 10.10+)
| MariaDB Type | Java Type | Description |
|---|---|---|
INET4 | Inet4 | IPv4 address |
INET6 | Inet6 | IPv6 address |
- Kotlin
- Java
- Scala
val inet4Type: MariaType<Inet4> = MariaTypes.inet4
val inet6Type: MariaType<Inet6> = MariaTypes.inet6
val ipv4: Inet4 = Inet4.parse("192.168.1.1")
val ipv6: Inet6 = Inet6.parse("::1")
MariaType<Inet4> inet4Type = MariaTypes.inet4;
MariaType<Inet6> inet6Type = MariaTypes.inet6;
Inet4 ipv4 = Inet4.parse("192.168.1.1");
Inet6 ipv6 = Inet6.parse("::1");
val inet4Type: MariaType[Inet4] = MariaTypes.inet4
val inet6Type: MariaType[Inet6] = MariaTypes.inet6
val ipv4: Inet4 = Inet4.parse("192.168.1.1")
val ipv6: Inet6 = Inet6.parse("::1")
Spatial Types
MariaDB spatial types use the MariaDB Connector/J geometry classes:
| MariaDB Type | Java Type | Description |
|---|---|---|
GEOMETRY | Geometry | Any geometry |
POINT | Point | Single point |
LINESTRING | LineString | Line of points |
POLYGON | Polygon | Closed polygon |
MULTIPOINT | MultiPoint | Multiple points |
MULTILINESTRING | MultiLineString | Multiple lines |
MULTIPOLYGON | MultiPolygon | Multiple polygons |
GEOMETRYCOLLECTION | GeometryCollection | Mixed geometries |
- Kotlin
- Java
- Scala
val pointType: MariaType<Point> = MariaTypes.point
val polygonType: MariaType<Polygon> = MariaTypes.polygon
val gcType: MariaType<GeometryCollection> = MariaTypes.geometrycollection
// Create a point
val p: Point = Point(1.0, 2.0)
MariaType<Point> pointType = MariaTypes.point;
MariaType<Polygon> polygonType = MariaTypes.polygon;
MariaType<GeometryCollection> gcType = MariaTypes.geometrycollection;
// Create a point
Point p = new Point(1.0, 2.0);
val pointType: MariaType[Point] = MariaTypes.point
val polygonType: MariaType[Polygon] = MariaTypes.polygon
val gcType: MariaType[GeometryCollection] = MariaTypes.geometrycollection
// Create a point
val p: Point = new Point(1.0, 2.0)
Nullable Types
Any type can be made nullable using .opt():
- Kotlin
- Java
- Scala
val notNull: MariaType<Int> = MariaTypes.int_
val nullable: MariaType<Int?> = MariaTypes.int_.opt()
MariaType<Integer> notNull = MariaTypes.int_;
MariaType<Optional<Integer>> nullable = MariaTypes.int_.opt();
val notNull: MariaType[Int] = MariaTypes.int_
val nullable: MariaType[Option[Int]] = MariaTypes.int_.opt
Custom Domain Types
Wrap base types with custom Java types using transform:
- Kotlin
- Java
- Scala
// Wrapper type
data class UserId(val value: Long)
// Create MariaType from bigint
val userIdType: MariaType<UserId> = MariaTypes.bigint.transform(::UserId, UserId::value)
// Wrapper type
public record UserId(Long value) {}
// Create MariaType from bigint
MariaType<UserId> userIdType = MariaTypes.bigint.transform(UserId::new, UserId::value);
// Wrapper type
case class UserId(value: Long)
// Create MariaType from bigint
val userIdType: MariaType[UserId] = MariaTypes.bigint.transform(UserId.apply, _.value)