如何使用 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 中提取时包含非拉丁字符的文件名的编码
从 SQLite 数据库中读取非 Unicode、非英文文本