如何使用 Node 从 MySQL 中读取非拉丁字符?

How to read non-latin characters from MySQL using Node?

我有一个查询 MySQL 数据库并将结果写入文件的节点应用程序。

查询结果是一段翻译成世界上大多数语言的文本。

我的问题是大多数非 ASCII 字符无法正确显示。例如

Wir möchten

写入文件为:

Wir möchten

这是我连接到数据库的方式:

  const mysql = require("mysql");
  const connection = mysql.createConnection({
    host: "",
    user: "",
    password: "",
    database: "",
    charset: "utf8", // I have tried 'utf8'/'latin1'/'BIG5'
  });

这是将查询结果写入文件的函数:

query(sql, (err, data) => {
  fs.writeFile("x.json", JSON.stringify(data), "utf8", function (err) {
    if (err) throw err;
    console.log("Saved!");
  });
});

我最终找到了一种适用于 MySQL SELECT 语句级别的方法:

SELECT CONVERT(CAST(CONVERT(column_name USING LATIN1) AS BINARY) USING UTF8) AS column_name from table_name;

我将上述语句用作我的节点应用程序的输入,它适用于我需要的所有字母表(拉丁文、西里尔文、中文...等)。

Source.

öö 的“Mojibake”。在

中查看 Mojibake

至于正确修复数据的方法,请从这里的 7 种情况中选择正确的情况:http://mysql.rjweb.org/doc.php/charcoll#fixes_for_various_cases

请注意,“双重编码”与“Mojibake”不同。