如何在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
相关产品推荐
相关产品推荐

