【问题标题】:How to read non-latin characters from MySQL using Node?如何使用 Node 从 MySQL 读取非拉丁字符?
【发布时间】:2022-01-09 12:30:15
【问题描述】:

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

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

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

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 node.js utf-8


    【解决方案1】:

    öö 的“Mojibake”。在Trouble with UTF-8 characters; what I see is not what I stored 中查看 Mojibake

    至于 正确 修复您拥有的数据的方法,请从此处的 7 个案例中选择正确的情况:http://mysql.rjweb.org/doc.php/charcoll#fixes_for_various_cases

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

    【讨论】:

      【解决方案2】:

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

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

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

      Source.

      【讨论】:

        猜你喜欢
        • 2015-06-26
        • 2016-11-12
        • 2011-04-15
        • 2021-05-12
        • 1970-01-01
        • 2011-10-02
        • 2010-10-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多