SQLite 类型
启用 sqlite Cargo feature 后使用 SQLx 原生 SQLite 连接池。SQLite 使用动态类型;下表是
afastorm 生成的列类型声明,不代表数据库会严格限制每个存入值的类型。
模型字段映射
| Rust 类型 | SQLite 列类型 | 说明 |
|---|---|---|
bool、i16、i32、i64 | INTEGER | 布尔值由 SQLx 绑定和解码。 |
f32、f64 | REAL | |
String、serde_json::Value | TEXT | JSON 序列化为文本,读取时解析。 |
Vec<u8> | BLOB | 原始字节。 |
uuid::Uuid(uuid) | TEXT | 使用 SQLx SQLite UUID 编解码。 |
| chrono / time 日期时间类型 | TEXT | 使用 SQLx SQLite 类型支持。 |
Decimal、BigDecimal | TEXT | 避免数值亲和性造成精度损失,读取时解析。 |
| IP 地址/网络类型 | TEXT | 文本存储,读取时解析。 |
MacAddress | TEXT | 文本表示。 |
BitVec | TEXT | 以 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 类型。