Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

SQLite 类型

启用 sqlite Cargo feature 后使用 SQLx 原生 SQLite 连接池。SQLite 使用动态类型;下表是 afastorm 生成的列类型声明,不代表数据库会严格限制每个存入值的类型。

模型字段映射

Rust 类型SQLite 列类型说明
bool、i16、i32、i64INTEGER布尔值由 SQLx 绑定和解码。
f32、f64REAL
String、serde_json::ValueTEXTJSON 序列化为文本,读取时解析。
Vec<u8>BLOB原始字节。
uuid::Uuid(uuid)TEXT使用 SQLx SQLite UUID 编解码。
chrono / time 日期时间类型TEXT使用 SQLx SQLite 类型支持。
Decimal、BigDecimalTEXT避免数值亲和性造成精度损失,读取时解析。
IP 地址/网络类型TEXT文本存储,读取时解析。
MacAddressTEXT文本表示。
BitVecTEXT以 0 和 1 字符串存储。

可选类型须启用对应 afastorm feature。ipnetwork、ipnet、mac_address 和 bit-vec 同时 启用 PostgreSQL feature,但它们的 SQLite 文本映射仍可用于 SQLite 连接。

PgArray<T> 和 PgRange<T> 仅适用于 PostgreSQL。即使它们出现在 SQLite 模型元数据中,列也只 会声明为 TEXT,afastorm 不会将其解码为 SQLite 模型字段,不要在 SQLite 模型或 Repository 中使用它们。

SQLite 特有行为

  • 自增主键声明为 INTEGER PRIMARY KEY AUTOINCREMENT。
  • auto_create、auto_update 和软删除字段会根据类型使用布尔值 0/1、Unix 秒、浮点 Unix 秒、CURRENT_TIMESTAMP 或 JSON 时间戳字符串。
  • 迁移生成器拒绝 SQLite 列类型变更和含糊/破坏性 schema 变更;这类变更应手动编写并审查。
  • 内置迁移 runner 为每个迁移开启事务。

通用模型用法见模型,PostgreSQL 映射见PostgreSQL 类型。