Prisma对接MySQL时长Text类型替代方案及报错解决
Prisma对接MySQL映射长文本字段方案
报错原因
你遇到的error: Type "TEXT" is neither a built-in type, nor refers to another model, custom type, or enum.报错,是因为Prisma Schema使用的是跨数据库兼容的抽象内置类型,不能直接写MySQL原生的TEXT作为字段类型。
MySQL所有长度的文本类型,都通过Prisma内置的String基础类型,搭配@db.*原生类型修饰符映射实现,不需要找额外替代方案。
具体映射规则
根据你需要的文本长度,选择对应的修饰符即可:
- 普通TEXT(单字段最大存储64KB):字段后加
@db.Text - MEDIUMTEXT(单字段最大存储16MB):字段后加
@db.MediumText - LONGTEXT(单字段最大存储4GB):字段后加
@db.LongText
配置示例
在schema.prisma文件中按如下方式定义模型即可:
model Article { id Int @id @default(autoincrement()) title String @db.VarChar(200) // 映射为MySQL的TEXT类型,存摘要类短长文本 summary String? @db.Text // 映射为MySQL的MEDIUMTEXT类型,存正文类中等长度文本 content String @db.MediumText // 映射为MySQL的LONGTEXT类型,存超大文本内容比如原始备份、富文本全量内容 origin_data String? @db.LongText }
生效操作
配置完成后执行以下命令让配置生效:
- 执行
prisma generate更新Prisma Client的类型定义 - 如果需要同步表结构,执行
prisma db push直接同步,或者通过prisma migrate dev生成迁移文件后执行
不要直接在字段类型位置写
TEXT/MEDIUMTEXT/LONGTEXT,这些都不是Prisma的内置字段类型,必须作为@db修饰符的参数使用。
内容的提问来源于stack exchange,提问作者mercury
相关产品推荐
相关产品推荐

