Node.js控制台输出波斯语异常及MySQL存储乱码问题
解决Node.js控制台波斯语显示异常及MySQL存储乱码问题
一、Node.js控制台输出波斯语方向颠倒问题
终端对RTL(从右到左)语言的渲染支持不由Node.js控制,console.log仅输出原始字符,显示方向取决于终端的渲染引擎。要强制终端按RTL规则显示,可在输出文本前后添加强制RTL方向的控制字符:
// 用U+202B(强制RTL)和U+202C(恢复默认方向)包裹文本 console.log('\u202B' + "کیان" + '\u202C');
Windows终端可检查语言设置,确保开启RTL语言显示支持;Linux/macOS终端对RTL支持较好,加上控制字符即可解决问题。
二、MySQL存储波斯语变成问号的问题
核心原因是字符集不匹配,分两种场景处理:
1. 实际存储数据已变成问号(数据损坏)
这种情况是数据库、表或字段的字符集非UTF8mb4,导致波斯语字符写入时无法正确编码,直接转为问号。解决步骤:
- 修改数据库/表的字符集为
utf8mb4,排序规则推荐用utf8mb4_persian_ci(针对波斯语优化):
-- 修改数据库字符集 ALTER DATABASE your_db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_persian_ci; -- 修改表字符集 ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_persian_ci;
- Node.js连接MySQL时,必须在配置中指定字符集为
utf8mb4(以mysql2库为例):
const mysql = require('mysql2/promise'); async function connect() { const connection = await mysql.createConnection({ host: 'localhost', user: 'your_username', password: 'your_password', database: 'your_db_name', charset: 'utf8mb4' // 必须指定该配置 }); return connection; }
2. MySQL终端显示问号,但实际存储数据正常
这种情况是MySQL客户端字符集设置问题,数据本身无损坏,仅终端显示乱码。执行以下命令后再查询即可:
SET NAMES utf8mb4;
你提到从MySQL读取后用res.send()发送到浏览器显示正常,是因为浏览器默认支持UTF-8编码,只要读取的数据正确,就能正常渲染。
内容的提问来源于stack exchange,提问作者ikianm
相关产品推荐
相关产品推荐

