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

向MySQL插入JSON触发‘列数与值数不匹配’错误排查

问题原因及解决思路

可能的原因

  • JSON对象未序列化为字符串:MySQL的JSON列要求传入JSON格式的字符串,但你直接传递了JS对象。部分数据库驱动会把JS对象拆解成多个参数(比如把对象的属性视为独立值),导致参数总数和SQL占位符数量(3个)不匹配,触发列数错误。而手动插入时你用的是JSON字符串,所以能正常执行。
  • 请求体解析异常:如果使用了body解析中间件(如body-parser),配置不当可能导致req.options被拆解为可迭代的结构(比如数组),使得参数数组变成[req.name, req.location, choice1, choice2, ...],参数数量远超占位符数量。
  • 数据库驱动的参数处理逻辑:部分驱动对非基础类型(如JS对象)的参数处理有特殊逻辑,不会自动将其转为JSON字符串,反而错误地拆分参数。

解决办法

  • 强制将req.options序列化为JSON字符串后传入:
    db.connection('INSERT into Surveys (name, location, options) VALUES (?,?,?)', [req.name, req.location, JSON.stringify(req.options)], ...)
    
  • 打印参数数组的长度和内容,确认是否为3个元素:
    console.log([req.name, req.location, req.options].length);
    console.log([req.name, req.location, req.options]);
    
  • 检查body解析中间件的配置,确保req.options是完整的单个对象,未被意外拆解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:01:15