Как сохранить сериализованный массив с драйвером узла mysql - PullRequest
0 голосов
/ 18 марта 2020

Я пишу игру, в которой пользователи могут сохранять и загружать созданные «карты», состоящие из точек, которые определяют вершины нисходящей карты (например, Doom WAD 1993 года).

Я беру список вершин (узлов) и сериализую их.

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], ...')"

My вопросы 1) это плохая схема базы данных? Должен ли я хранить узлы по-другому? и 2) Как я могу одновременно экранировать строку и сохранить ее в одном строковом значении?

РЕДАКТИРОВАТЬ: На самом деле запрос POST - это то, что изменяет строку на объект JSON, но остается вопрос: рекомендуется ли хранить тысячи координат?

1 Ответ

0 голосов
/ 18 марта 2020

Используйте MySQL тип данных JSON , а не строковый тип данных. Таким образом, вы упростите свой код и оптимизируете его, сократив преобразования типов данных, получите дополнительную проверку объектов данных на уровне ядра базы данных, сделайте вашу базу данных независимой от будущего JSON изменения структуры объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...