Prisma:列长度错误致迁移失败,如何不重置数据库修复
解决Prisma迁移因varchar长度超限导致的问题
问题概述
- 迁移时给
cardJson列设置了过长的varchar长度,触发MySQL错误1074(最大允许16383),导致迁移失败 - 用
prisma migrate resolve --rolled-back "20221205190350_migration_name_here"标记迁移回滚后,修改了迁移文件和schema里的字段类型(改成TEXT/BLOB),但重新执行迁移时提示该迁移已应用 - 涉事表是空表,可以删除,拒绝重置整个数据库
完整错误信息翻译
Error: P3006
迁移
20221205190350_migration_name_here无法正常应用到影子数据库。
错误代码: P3018
错误详情:
迁移应用失败,必须先修复该错误才能继续应用新迁移。迁移名称: 20221205190350_migration_name_here
数据库错误代码: 1074
数据库错误:
列'cardJson'的长度过大(最大值为16383);请改用BLOB或TEXT类型请检查迁移文件中的第1条查询语句。
修复步骤
1. 删除Prisma的迁移追踪记录
登录你的数据库(用MySQL命令行、Navicat或其他可视化工具均可),找到_prisma_migrations表,删除其中迁移名称为20221205190350_migration_name_here的那条记录。这个表是Prisma用来记录哪些迁移已经执行过的核心表,删掉这条记录后,Prisma会认定该迁移从未被执行。
2. 删除空的涉事表
因为涉事表是空的,直接执行SQL删除:
DROP TABLE IF EXISTS `你的表名`;
把你的表名替换成实际出问题的表名称。
3. 重新执行迁移
回到项目根目录,执行命令:
prisma migrate dev
此时Prisma会重新读取你修改后的迁移文件,正常执行迁移——因为之前的迁移记录已清除,空表也删掉了,不会再触发之前的长度错误。
4. 验证修复结果
执行prisma studio打开Prisma的可视化工具,检查涉事表的cardJson列是否已经是TEXT/BLOB类型,确认表结构无误。
内容的提问来源于stack exchange,提问作者Rockwell Rice
相关产品推荐
相关产品推荐

