You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Swift Fluent MySQL迁移中创建TEXT/LONGTEXT类型列?

在Fluent MySQL迁移中指定TEXT/JSON类型的解决方法

核心方案:使用MySQL专属列类型

Fluent支持通过自定义字段类型来指定MySQL特有的列类型,直接绕过默认的VARCHAR(256)限制,具体实现如下:

1. 创建TEXT类型字段

在迁移代码中,针对目标字段调用.custom(.text)即可生成TEXT列:

struct CreateTargetModel: AsyncMigration {
    func prepare(on database: Database) async throws {
        try await database.schema("target_models")
            .id()
            .field("value", .custom(.text)) // 指定为TEXT类型
            .create()
    }

    func revert(on database: Database) async throws {
        try await database.schema("target_models").delete()
    }
}

2. 创建JSON类型字段

同理,指定JSON类型只需替换为.custom(.json):

.field("metadata", .custom(.json))

3. 优化代码可读性:自定义字段类型扩展

如果需要多次使用这些专属类型,可以给FieldType添加扩展,让代码更直观:

extension FieldType {
    static let mysqlText = FieldType.custom("TEXT")
    static let mysqlJSON = FieldType.custom("JSON")
}

之后在迁移中直接调用:

.field("value", .mysqlText)

4. 兼容多数据库(可选)

如果你的服务未来可能切换数据库,可以通过条件判断保持兼容性:

.field("value", database is MySQLDatabase ? .custom(.text) : .string)

内容的提问来源于stack exchange,提问作者Jerry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:02:32