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

Node.js写入MySQL的Byte数组长度异常增大问题求助

问题原因及解决方案

为什么字节数组长度变大?

  • 你直接把Byte数组拼进SQL字符串的操作是错误的。当二进制数组和字符串拼接时,Node.js会自动调用数组的toString()方法,把二进制数据转成UTF-8字符串。但二进制数据里大量字节序列不符合UTF-8编码规则,这些无效序列会被替换成替换字符�(U+FFFD),每个替换字符占3个字节。这就导致原二进制数据被篡改,插入BLOB后再读取,字节长度自然大幅膨胀。
  • 另外,这种直接拼接SQL的写法还存在严重的SQL注入风险,属于不安全的编码方式。

怎么解决?

使用Node.js MySQL库的参数化查询(预处理语句),让库自动处理二进制数据与BLOB类型的正确映射,避免编码转换错误:

修改插入代码

// 用?作为参数占位符,不要直接拼接字符串
const query = "INSERT INTO spreaddata.workbook SET user_email = ?, workbook_data = ?";
// 将参数放入数组,传给query方法
connection.query(query, [userEmail, workbook_data], (err, results) => {
  if (err) throw err;
  console.log("数据插入完成");
});

修改查询代码

const selectQuery = "SELECT * from spreaddata.workbook WHERE user_email = ?";
connection.query(selectQuery, ['name@company.com'], (err, results) => {
  if (err) throw err;
  const workbookData = results[0].workbook_data;
  console.log("读取到的字节数组长度:", workbookData.length); // 此时长度应为9459
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:32:03