【问题标题】:Convert mysql query from latin1 to utf8 using nodejs使用nodejs将mysql查询从latin1转换为utf8
【发布时间】:2014-01-02 14:04:46
【问题描述】:

我在 latin1 中有一个数据库,我想将其查询转换为 utf-8

例子:

response.write 返回此 JSON:

{"questions":[{"question":"Nação","answer":"País"}]}

但我需要将其转换为 utf8:

{"questions":[{"question":"Nação","answer":"País"}]}




conexao_bd.getConnection(function(err,con){
            if(err) return console.log("Erro na conexao. "+err);
            con.query("SELECT question, answer FROM "+tipo+" WHERE id IN "+c,function(err, rows){
                if(err) console.log("Erro na query questions: "+err);
                else{
                    for(var k =0;k<rows.length;k++)
                        perguntas.questions[k]={'question': rows[k].question,'answer':rows[k].answer};
                    console.log(JSON.stringify(perguntas));
                    con.release();
                    response.writeHeader(200, {"Content-Type": "text/plain"});
                    response.write(JSON.stringify(perguntas));
                    response.end();
                }
            });

        });

【问题讨论】:

    标签: mysql node.js encoding latin1 node-mysql


    【解决方案1】:

    @bodokaiser 发布的重新编码字符串也是一种可能,但这不是一个干净的系统解决方案。干净的解决方案是告诉数据库给你utf-8。这可以通过两种方式完成:

    1. 使用查询set names utf8 设置连接字符集。
    2. 在创建连接时设置连接字符集。不知道这在 node.js 中是否可行。如果不使用上述选项。

    【讨论】:

    • 好建议我更新了我的答案。 node-mysql 似乎支持 charset 作为选项
    【解决方案2】:

    您将需要一个额外的模块来转换不同的字符串编码。 node-iconv 似乎是您要找的人!它也由 libuv/node 的核心开发人员维护,因此它应该是相当可持续的。但是,如果可能,请考虑更新数据库上的编码,因为这可能是最持久的解决方案。

    PS:使用node-mysql 也应该可以直接将传入的数据通过管道传输到编码流(可能行不通,但你明白了):

    var mysql = require('mysql');
    var iconv = require('iconv');
    
    var connection = mysql.createConnection({
      host     : 'localhost',
      user     : 'me',
      password : 'secret'
    });
    
    connection.connect();
    var query = connection.query('SELECT 1 + 1 AS solution')
    var encoder = new iconv.Iconv('latin1', 'utf-8');
    
    // will encode result and pipe it to your terminal
    query.pipe(encoder.pipe(process.stdout));
    

    编辑: 如果更新数据库不是一个选项,Thomas 就在 node-mysql 中设置字符集提出了一个很好的建议。这似乎也可以参见 here 并且应该比我的 hack 更好。但是,如果您不使用 node-mysql,这可能是一种解决方法。

    【讨论】:

      猜你喜欢
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      • 2015-04-09
      • 1970-01-01
      相关资源
      最近更新 更多