You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Node.js从MySQL读取非拉丁字符出现乱码如何解决?

乱码问题根因

你遇到的是典型的UTF-8字符被错误按Latin1二次编码的问题,根源出在MySQL连接的字符集配置不匹配,以及MySQL自带的utf8字符集为阉割版本,无法支持完整的UTF-8编码。

修复步骤

1. 修正数据库连接配置

将mysql连接参数中的charset改为utf8mb4,这是MySQL支持完整4字节UTF-8的标准字符集,可覆盖所有语言字符、特殊符号、emoji等:

const mysql = require("mysql");
const connection = mysql.createConnection({
  host: "",
  user: "",
  password: "",
  database: "",
  charset: "utf8mb4", // 替换之前的utf8/latin1等配置
});

2. 确认存储层字符集配置

确保你查询的库、表、对应存储译文的字段的字符集都统一为utf8mb4,可通过以下SQL查询校验:

-- 查询数据库字符集
SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = '你的数据库名';
-- 查询表字符集
SELECT CCSA.character_set_name FROM information_schema.`TABLES` T,information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA WHERE CCSA.collation_name = T.table_collation AND T.table_schema = '你的数据库名' AND T.table_name = '你的表名';
-- 查询字段字符集
SELECT character_set_name FROM information_schema.`COLUMNS` WHERE table_schema = '你的数据库名' AND table_name = '你的表名' AND column_name = '存储译文的字段名';

如果字符集不符合要求,可通过以下SQL修改:

-- 修改库字符集
ALTER DATABASE 你的数据库名 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
-- 修改表及所有字段字符集
ALTER TABLE 你的表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

3. 可选:显式初始化连接字符集

如果修改连接参数后仍存在乱码,可在连接建立后主动执行字符集设置语句,确保整个传输链路字符集统一:

connection.connect((err) => {
  if (err) throw err;
  connection.query('SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci', (err) => {
    if (err) throw err;
    // 后续执行你的查询逻辑即可
  });
});

4. 文件写入逻辑无需调整

你现有的fs.writeFile已经指定了utf8编码,JSON.stringify默认输出UTF-8编码的字符串,这部分配置是正确的,不需要修改。

内容的提问来源于stack exchange,提问作者Seif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:15:04