使用Prisma向SQL Server插入docx文件时报‘列值过长’错误求助
问题分析与解决方案
可能的原因及对应解决方法
1. 文件名长度超出字段限制
你的File模型中fileName字段定义为@db.NVarChar(100),如果上传的docx文件名(含路径)长度超过100字符,就会触发"字段值过长"的错误。而SQL Server返回的错误提示未明确列名,容易让你误以为是content字段的问题。
解决步骤:
- 检查当前上传的docx文件名长度,确认是否超过100字符;
- 如果需要支持更长文件名,修改
File模型的fileName定义,比如调整为@db.NVarChar(255),然后重新执行prisma migrate dev更新数据库结构。
2. Prisma 4.2.1版本的SQL Server适配bug
Prisma 4.2.1属于较早的4.x版本,存在一些针对SQL Server二进制数据处理的已知问题,尤其是对特定格式的二进制文件(比如docx的OLE复合文档结构)可能存在兼容性问题。
解决步骤:
- 升级Prisma到4.x系列的最新稳定版本(比如4.16.x及以上),执行命令:
npm install prisma@latest npx prisma generate - 重新测试docx文件上传功能。
3. 二进制数据的编码/转换错误
检查你的fileParams函数,确认是否正确处理了docx文件的Buffer数据:
- 避免将Buffer错误转换为字符串(比如使用
toString('utf8'))再转回Buffer,这会破坏docx的二进制结构,导致数据体积异常或格式错误; - 确保
fileParams返回的content是原始的文件Buffer,没有经过多余的编码处理。
验证方法:
在fileParams函数中添加日志,打印content的长度和类型,确认和原始文件大小一致:
function fileParams(file) { console.log('File buffer length:', file.content.length); console.log('File buffer type:', typeof file.content); // 其他处理逻辑 return { fileName: file.name, content: file.content }; }
内容的提问来源于stack exchange,提问作者Dyvd
相关产品推荐
相关产品推荐

