【问题标题】:Troubles with encoding when getting non-english characters from database in node.js从 node.js 中的数据库获取非英语字符时出现编码问题
【发布时间】:2018-01-14 08:02:34
【问题描述】:

在节点 js 中,我有非常简单的代码来向数据库发出请求:

var mysql      = require('mysql');
var connection = mysql.createConnection({
    host: 'localhost',
    user: 'user',
    password: 'password',
    database: "databasename"
});

connection.connect();

connection.query('SELECT * FROM main_categories', function (error, results, fields) {
    if (error) throw error;
    console.log(results);
});

connection.end();

我正在用这个 sql 脚本创建数据库和表:

CREATE DATABASE databasename
  CHARACTER SET utf8
  COLLATE utf8_unicode_ci;

CREATE TABLE main_categories (
  id   INT          NOT NULL AUTO_INCREMENT,
  name VARCHAR(255) NOT NULL,
  PRIMARY KEY (id)
);

当我尝试在 mysql 控制台中选择代码时,一切看起来都不错,但是当我尝试在 node.js 中获取结果时,在控制台日志中我看到它是这样的:

[ RowDataPacket { id: 1, name: 'Візочки' },
  RowDataPacket { id: 2, name: 'ДитÑчий транÑпорт' },
  RowDataPacket { id: 3, name: 'ÐвтокріÑла' },
  RowDataPacket { id: 4, name: 'Іграшки' },
  RowDataPacket { id: 5, name: 'ДитÑча кімната' },
  RowDataPacket { id: 6, name: 'Ð’Ñе Ð´Ð»Ñ Ð³Ð¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ' },
  RowDataPacket { id: 7, name: 'ÐкÑеÑуари Ð´Ð»Ñ Ð¼Ð°Ð¼' },
  RowDataPacket { id: 8, name: 'Гігієна та доглÑд' } ]

我尝试在使用mysql.createConnection 和任何其他解决方案时在配置对象中添加charset,但不幸的是没有结果。

UPD:查看数据库变量可能会有所帮助:

mysql> SHOW variables WHERE variable_name LIKE '%coll%' OR variable_name LIKE '%char%';
+--------------------------+-----------------------------------------------------------+
| Variable_name            | Value                                                     |
+--------------------------+-----------------------------------------------------------+
| character_set_client     | utf8                                                      |
| character_set_connection | utf8                                                      |
| character_set_database   | utf8                                                      |
| character_set_filesystem | binary                                                    |
| character_set_results    | utf8                                                      |
| character_set_server     | latin1                                                    |
| character_set_system     | utf8                                                      |
| character_sets_dir       | /usr/local/mysql-5.7.19-macos10.12-x86_64/share/charsets/ |
| collation_connection     | utf8_general_ci                                           |
| collation_database       | utf8_general_ci                                           |
| collation_server         | latin1_swedish_ci                                         |
+--------------------------+-----------------------------------------------------------+

【问题讨论】:

    标签: javascript mysql node.js encoding character-encoding


    【解决方案1】:

    Візочки 是 Mojibake 对应于 Візочки。当您到处都没有 utf8/utf8mb4 时,就会发生这种情况。特别是,node.js 需要类似的东西

    var connection = mysql.createConnection({ ... , charset : 'utf8mb4'});
    

    【讨论】:

      【解决方案2】:

      我在创建表格之前添加了SET NAMES utf8;,所以它看起来像这样:

      SET NAMES utf8;
      
      CREATE TABLE main_categories (
        id   INT          NOT NULL AUTO_INCREMENT,
        name VARCHAR(255) NOT NULL,
        PRIMARY KEY (id)
      );
      

      就是这样!

      【讨论】:

      • @MojtabaPourmirzaei 因为在这种情况下它为我解决了问题。
      猜你喜欢
      • 2011-05-29
      • 2012-08-22
      • 2015-10-27
      • 2020-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      • 1970-01-01
      相关资源
      最近更新 更多