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

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

并且需要根据以下规则将此数据存储在mysql数据库中:
  • 1个数字= 1个字节

  • 因此,如果数组长度等于4,则mysql DB中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;
                }
            );
        });
    });
    

    你有什么主意吗?

    最佳答案

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

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

    其中数据是Blob数据

    10-04 21:26
    查看更多