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

MySQL中使用JSON_SET更新JSON数组的语法与格式问题求助

解决MySQL JSON_SET更新longtext列时数组转字符串的问题

你的问题核心是:用JSON_SET更新存储JSON的longtext列时,要么出现语法错误,要么数组被转成带引号的字符串类型(如"[1,22,66,77]")而非JSON数组。以下是两种可行的解决办法:

方法一:适配旧版mysql驱动——字符串化后CAST为JSON类型

如果你用的是旧版mysql驱动,需要手动把数组转成JSON字符串,再通过CAST(? AS JSON)告诉MySQL将其解析为JSON类型:

const IamCreator = 1;
const myValue = [1,22,66,77];

const query = `UPDATE 8users SET content = JSON_SET(content, '$.aaaaa', CAST(? AS JSON)) WHERE id = ?`;
connection.query(query, [JSON.stringify(myValue), IamCreator], function(err, result) {
  if (err) console.error(err);
  else console.log('更新成功');
});

方法二:使用mysql2驱动(推荐)——直接传递数组

mysql2驱动支持直接传递数组或JSON对象,会自动帮你序列化成MySQL能识别的JSON格式,无需手动处理:

const IamCreator = 1;
const myValue = [1,22,66,77];

const query = `UPDATE 8users SET content = JSON_SET(content, '$.aaaaa', ?) WHERE id = ?`;
connection.query(query, [myValue, IamCreator], function(err, result) {
  if (err) console.error(err);
  else console.log('更新成功');
});

之前写法出错的原因

  1. 给占位符加单引号'?':这会把?当成普通字符串,既触发语法错误,又导致传入的数组被转成字符串字面量存储。
  2. 尝试[?]的写法:MySQL不支持这种语法,不能用[]包裹占位符来表示数组。
  3. 直接传JSON.stringify结果但未加CAST:MySQL会把字符串当成普通文本存储,最终得到带引号的字符串而非JSON数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:16:01