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

Posted

技术标签:

【中文标题】如何使用 Node 从 MySQL 读取非拉丁字符?【英文标题】:How to read non-latin characters from MySQL using Node? 【发布时间】: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!");
  );
);

【问题讨论】:

【参考方案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.

【讨论】:

以上是关于如何使用 Node 从 MySQL 读取非拉丁字符?的主要内容,如果未能解决你的问题,请参考以下文章

从 Ant tar 任务打包的 .tar.gz 中提取时包含非拉丁字符的文件名的编码

带有非拉丁字符的 Javascript slug 函数

从 SQLite 数据库中读取非 Unicode、非英文文本

无法更改 MySQL 5.7 中的字符集(从拉丁语到 utf8)

Mysql 5中列级别的CHARSET

xml 输出中的非拉丁字符