MySQL

MySQL backend for environments using MySQL or MariaDB databases.

Installation

Add the MySQL backend to your target:

.product(name: "MySQLBackend", package: "SwiftDataServer")

Configuration

import SwiftDataServer
import MySQLBackend

let backend = MySQLBackend(
    hostname: "localhost",
    port: 3306,
    username: "root",
    password: "password",
    database: "myapp"
)

try await backend.connect()

Environment Variables

let backend = MySQLBackend(
    hostname: Environment.get("DB_HOST") ?? "localhost",
    port: Environment.get("DB_PORT").flatMap(Int.init) ?? 3306,
    username: Environment.get("DB_USER") ?? "root",
    password: Environment.get("DB_PASS") ?? "password",
    database: Environment.get("DB_NAME") ?? "myapp"
)

Type Mappings

Swift Type MySQL Type
StringTEXT
IntBIGINT
Int32INT
Int16SMALLINT
DoubleDOUBLE
FloatFLOAT
BoolTINYINT(1)
DateDATETIME
UUIDCHAR(36)
DataBLOB
[Codable]JSON

Connection Pooling

let poolConfig = ConnectionPoolConfiguration(
    minConnections: 2,
    maxConnections: 20,
    idleTimeout: 300,
    acquireTimeout: 30
)

let backend = MySQLBackend(
    hostname: "localhost",
    port: 3306,
    username: "root",
    password: "password",
    database: "myapp",
    poolConfiguration: poolConfig
)

Character Set

Use UTF-8 for full Unicode support:

let backend = MySQLBackend(
    hostname: "localhost",
    port: 3306,
    username: "root",
    password: "password",
    database: "myapp",
    characterSet: "utf8mb4"
)

Requirements

  • MySQL 8.0 or later
  • MariaDB 10.5 or later (compatible)

Next Steps