Как правильно хранить данные BLOB-объектов в MySQL, используя nodejs и JavaScript - PullRequest
4 голосов
/ 17 августа 2011

У меня есть массив целых чисел от 0 до 255 в javascript;

var arr = [249, 13, 105, 170];

И требуется хранить эти данные в базе данных mysql в соответствии с этим правилом:

  • 1 число = 1 байт

Таким образом, если длина массива равна 4, то размер данных BLOB-объектов в базе данных MySQL должен составлять 4 байта.И он отлично работает с числами меньше 128.

var res = "";    
for(var i = 0; i < arr.length; i++) {
    res += String.fromCharCode(arr[i]);
}

Но числа от 128 до 256 занимают 2 байта.

Я попытался использовать буфер nodejs

var Buffer = require('buffer').Buffer,
    buf = new Buffer(arr.length);
for(var i = 0; i < arr.length; i++) {
    buf[i] = arr[i];
}
buf.toString('binary');

но результат тот же.Я понятия не имею, как заставить это работать.

для хранения данных в базе данных mysql Я использую node-mysql

var Client = require('mysql').Client,
    client = new Client();
client.user = DB_USER;
client.password = DB_PASS;
client.host = DB_HOST;
client.connect(function(error, results) {
    if(error) {
        client.end();
        return;
    }
    client.query('USE ' + DB_SCHEME, function(error, results) {
        if(error) {
            client.end();
            return;
        }

        var sql = "INSERT INTO b SET `data` = ?";
        var values = [buf];

        client.query(sql, values,
            function(error, results) {
                if(error) {
                    return;
                }
                return;
            }
        );
    });
});

У вас есть идеи?

1 Ответ

2 голосов
/ 17 августа 2011

Мне удалось сделать это, используя встроенную функцию mysql CHAR :

var arr = [249, 13, 105, 170];
var sql = "INSERT INTO b SET `data` = CHAR( " + arr + " )";

client.query(sql);

, где data - данные BLOB-объекта

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