NodeJS MYSQL查询结果缓冲区?

时间:2016-10-28 11:00:37

标签: mysql node.js buffer

mysql选择查询结果...

//nodejs database.js
var mysql      = require('mysql');
var connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'me',
    database : 'test',
    password : '1234'
});

// nodejs app.js
app.get('/api/v0.1/getPostList', function(req, res) {
        limit_count = 5;
        db.query(postModel.postList(limit_count) , function(err, rows) {
            if (err) throw err;
            console.log(rows)
            res.json(rows);
        });
    });

//result
RowDataPacket {
    POST_SEQ: 13,
    POST_TYPE: <Buffer 31 31 30 30>,
    CATEGORY: <Buffer 49 54 20 2f 20 4d 4f 42 49 4c 45>, ...

为什么查询数据缓冲区类型?
我不知道原因。

java查询数据成功
[DEBUG] [2016-10-28 19:20:24,160]&lt; == Row:13,1100,GAME ......

4 个答案:

答案 0 :(得分:2)

我通过访问值解决了这个问题:

行[0] .POST_TYPE.toString(&#39; UTF8&#39);
   行[0] .CATEGORY.toString(&#39; UTF8&#39);

答案 1 :(得分:0)

但如果您有大量记录和字段,这会导致性能问题。您将不得不迭代并串扰所有缓冲区字段。 它应该接收预定义数据类型的数据。即VARCHAR - &gt;串

答案 2 :(得分:0)

我遇到了COUNT生成的int值这个问题。我能够通过在查询中将这些值转换为CHAR来解决问题。然后他们正确地返回格式化为js字符串。这是一个示例查询:

SELECT Date, Park, COUNT(FileID) FROM SkatePix WHERE Park != '' AND Date != 0 GROUP BY Date, Park LIMIT 5;

我将COUNT语句更改为:

 CAST(COUNT(FileID) AS CHAR) /* formerly COUNT(FileID) */

这就是诀窍。

答案 3 :(得分:0)

这个话题很老。

但是,我在任何地方都没有很好的答案。

我找到了很好的解决方案。所以我回答了这个话题

  

参考(npm-mysql)   https://www.npmjs.com/package/mysql#type-casting

// Modify the typeCast option to suit your situation.
createConnection({
    host: config.host,
    port: config.port,
    user: config.user,
    password: config.password,
    database: config.database,
    multipleStatements: true,
    typeCast: function (field, next) {
        if (field.type == 'VAR_STRING') {
            return field.string();
        }
        return next();
    }
})