如何正确使用nodejs和javascript在mysql中存储blob数据

发布于 2024-11-29 19:07:07 字数 1419 浏览 2 评论 0原文

我在 javascript 中有一个从 0 到 255 的整数数组;

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

并且要求将这些数据按照以下规则存储在mysql数据库中:

  • 1个数字=1字节

因此,如果数组长度等于4,那么mysql数据库中blob数据的大小必须是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;
            }
        );
    });
});

你有什么想法吗?

I have an array of integers from 0 to 255 in javascript;

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

And it's required to store this data in mysql database according this rule:

  • 1 number = 1 byte

So, if the array length equals 4, then the size of blob data in mysql DB must be 4 bytes. And it works fine with numbers less than 128.

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

But numbers from 128 to 256 takes 2 bytes.

I tried to use nodejs buffer

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');

but the same result. I have no idea how to make it work.

to store data in mysql database I use 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;
            }
        );
    });
});

Do you have any idea?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

知你几分 2024-12-06 19:07:07

我已经设法使用内置的 mysql CHAR 函数来做到这一点:

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

client.query(sql);

其中 data 是 blob 数据

I've managed to do it using built-in mysql CHAR function:

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

client.query(sql);

where data is blob data

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文