【问题标题】:How to store a serialized array with node mysql driver如何使用节点 mysql 驱动程序存储序列化数组
【发布时间】:2020-03-18 05:18:45
【问题描述】:

我正在编写一个游戏,用户可以在其中保存和加载创建的“地图”,这些“地图”由定义自上而下地图顶点的点组成(想想 1993 年的 Doom WAD)。

我获取一个顶点(节点)列表并将它们序列化。

let nodes = [{'x': 1, 'y': 1}, {'x': 5, 'y': 4}, ...];
const data = JSON.stringify(nodes);

然后将它们插入到表格中

connection.query('INSERT INTO mapnodes VALUES (?)', [data], (error, results, fields) => {
    ...
});

问题是当我真的想插入单个字符串值时,mysql驱动程序所做的转义会将序列化的字符串变成一个数组。

这是mysql驱动看到的:

"INSERT INTO mapnodes VALUES ('[object Object],[object Object], ...')"

我的问题是 1) 这是一个糟糕的数据库架构吗?我应该以不同的方式存储节点吗? 和 2) 我怎样才能同时转义字符串并将其保留为单个字符串值?

编辑: 实际上,POST 请求是将字符串更改为 JSON 对象的原因,但问题仍然存在 - 这是存储潜在数千个坐标的推荐方式吗?

【问题讨论】:

    标签: javascript mysql json serialization


    【解决方案1】:

    使用 MySQL the JSON data type,而不是字符串数据类型。因此,您将简化代码并对其进行优化,减少数据类型转换,在数据库引擎级别获得额外的数据对象验证,使您的数据表独立于未来的 JSON 对象结构修改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多