返回

MySQL JSON 列插入 JavaScript 对象的正确方式

mysql

将 JSON 无缝插入 MySQL JSON 列

问题陈述

当你试图将一个 JavaScript 对象直接插入到 MySQL JSON 列时,可能会收到以下错误信息:

错误:ER_PARSE_ERROR
信息:SQL 语法错误,请检查 MySQL 版本对应的语法指南

根源剖析

此错误的原因是,你尝试将一个 JavaScript 对象作为字符串插入到 MySQL JSON 列中。正确的做法是将 JavaScript 对象转换为 JSON 字符串,然后将其插入到数据库中。

解决方案

要解决此问题,请按照以下步骤操作:

  1. 使用 JSON.stringify() 函数将 JavaScript 对象转换为 JSON 字符串。
  2. 将转换后的 JSON 字符串插入到 MySQL JSON 列中。

代码示例

以下是修改后的代码示例,演示如何正确将 JSON 插入到 MySQL JSON 列中:

app.post('/', upload.array('files'), (req,res) => {
    let firstName = req.body.firstName;
    let lastName = req.body.lastName;
    let filename = JSON.stringify(req.files);
    let postQuery = `INSERT INTO product (firstName, lastName, files) VALUES ('${firstName}', '${lastName}', '${filename}');`;
    connection.query(postQuery, (err,result,fields) => {
        if (err) { throw err };
        res.send('Response has been recorded...');
    })
})

注意事项

  • 确保你的 MySQL 版本支持 JSON 数据类型。
  • JSON 字符串必须使用双引号括起来,键值对之间必须使用逗号分隔。

结论

通过遵循这些步骤,你将能够成功将 JSON 插入到 MySQL JSON 列中,避免语法错误和数据损坏。

常见问题解答

  1. 为什么直接插入 JavaScript 对象会出现错误?
    因为 MySQL 无法识别 JavaScript 对象,而 JSON 字符串才是 MySQL JSON 列中支持的数据类型。

  2. 除了 JSON.stringify() 之外,还有其他方法将 JavaScript 对象转换为 JSON 字符串吗?
    是的,你还可以使用 JSON.parse() 函数来解析 JSON 字符串。

  3. 如何确定 MySQL 版本是否支持 JSON 数据类型?
    你可以使用 SHOW VARIABLES LIKE '%json%'; 查询来检查 json_support 变量的值。如果该值为 YES,则表明你的 MySQL 版本支持 JSON 数据类型。

  4. JSON 字符串中键名需要使用双引号吗?
    是的,在 JSON 字符串中,键名必须使用双引号括起来,但值可以是字符串、数字或布尔值,而无需引号。

  5. 如何在 MySQL 查询中使用 JSON 数据类型?
    你可以使用 JSON_EXTRACT()JSON_SET() 等函数来操作和查询 JSON 数据类型。