如何使用node.js从MySQL解码中文字符

时间:2018-09-20 09:27:05

标签: mysql node.js google-cloud-sql knex.js

我正在尝试按语言从mysql数据库查询注释表。 每当我通过语言查询以获取中文注释时,它就会显示编码的乱码。但是每当我使用python查询时,它都可以工作。

Cloud Platform:Google Cloud SQL 数据库位置:Google Cloud SQL 编程语言:Nodejs

下面是我的代码

// Require process, so we can mock environment variables
  const process = require('process');
  const Knex = require('knex');
  const express = require('express');
  const app = express();

  const config = {
     user: process.env.SQL_USER,
     password: process.env.SQL_PASSWORD,
     database: process.env.SQL_DATABASE,
     socketPath: `/cloudsql/${process.env.INSTANCE_CONNECTION_NAME}`
   };


    var knex = Knex({
       client: 'mysql',
       connection: config
    });



  app.get('/', (req, res) => {
      knex.select('post')
       .from('comment')
         .where({
             'language': 'zh'
          }).limit(1).then((rows) => {
               res.send(rows);
          }).catch((err) => {
            res.send(err);
           });
     });

这是我的查询结果:

  

“帖子”:“ ¢äººï¼“

请帮助.....

1 个答案:

答案 0 :(得分:0)

“如果将“最白痴的部长基本的常识和逻辑都没有。真丢人”发送为编码为UTF-8,然后读取并解码为Windows-1252字符集,则会得到“。”

误解可能在几个不同的地方发生:

  1. 从客户端到应用程序,在首次添加数据时写入数据库
  2. 添加数据时,在应用程序和MySQL之间
  3. 在未正确应用的MySQL中进行的配置更改。
  4. 在MySQL和读取数据的应用程序之间。
  5. 在应用程序和最终客户端之间向您显示数据。

要进行调查,我建议保持系统性。首先使用其他工具访问数据,例如CloudShell中的PHPMyAdmin或mysql命令行。如果看到正确的数据,则说明问题是(4)或(5)。如果数据库中肯定有错误的数据,则为(1),(2)或(3)。

最常发生此错误的地方是(5),因此我将进一步介绍。这是因为网站经常将字符集设置为错误或完全错误。要解决此问题,我们必须使字符集明确。您可以在express.js中添加以下内容:

res.set('Content-Type', 'text/plain; charset=utf-8')