Nodejs 在 ubuntu 下连接 sqlserver 遇到编码问题,中文显示乱码
Nodejs 在 ubuntu 下连接 sqlserver 遇到编码问题,中文显示乱码
node.js里用到是node-odbc,通过freetds+unixodbc连接sqlserver
Database=require('odbc').Database,
db=new Database(),
cn="DSN=SERVER;UID=sa;PWD=pwd;DATABASE=db",
iconv=require('iconv-lite');
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/html;charset=utf-8"});
db.open(cn,function(err){
if(err) return console.log(err);
db.query("select top 20 usernc from theuser order by userid desc",function(err,rows,moreResultSets){
if(err) return console.log(err);
var a="";
for (var i in rows) {
a+=rows[i].usernc+',';
console.log(rows[i].usernc);
}
response.write(a);
});
db.close(function (err) {
console.log("the database connection is now closed");
});
});
输出到中文都是???????问号,
而直接用isql -v server sa pwd 查出来到中文能正常显示 用tsql -S server -p 1433 -U sa -P pwd 查出来到也没事,
就用node-odbc 出来的是??????
2 回复
Nodejs 在 Ubuntu 下连接 SQLServer 遇到编码问题,中文显示乱码
背景信息
在使用 Node.js 连接 SQL Server 时,可能会遇到编码问题导致中文显示为乱码。本文将讨论如何解决这个问题。
问题描述
使用 node-odbc
库通过 freetds + unixodbc
连接到 SQL Server 后,查询结果中的中文字符显示为问号(??????
)。然而,使用 isql
和 tsql
工具查询时,中文字符能够正确显示。
解决方案
-
检查数据库和表的编码 确保 SQL Server 数据库和表的字符集设置为支持中文的编码,例如
Chinese_PRC_CI_AS
。 -
配置
freetds.conf
确保freetds.conf
文件中正确的字符集配置:[global] tds version = 8.0 client charset = UTF-8 [SERVER] host = <your_server_ip> port = 1433 tds version = 8.0 client charset = UTF-8
-
使用
iconv-lite
处理字符编码 使用iconv-lite
库将数据从数据库的编码转换为 UTF-8 编码。示例代码如下:
const odbc = require('odbc'); const iconv = require('iconv-lite'); const cn = "DSN=SERVER;UID=sa;PWD=pwd;DATABASE=db"; async function fetchData() { try { const db = await odbc.connect(cn); const result = await db.query("SELECT TOP 20 usernc FROM theuser ORDER BY userid DESC"); let a = ""; for (const row of result) { // Convert the character encoding to UTF-8 const usernc = iconv.decode(new Buffer.from(row.usernc), 'GBK'); // 假设数据库使用 GBK 编码 a += usernc + ','; console.log(usernc); } console.log(a); db.close(); } catch (err) { console.error("Error:", err); } } fetchData();
解释
- 数据库和表的编码:确保数据库和表使用支持中文的编码格式,如
GBK
或UTF-8
。 - 配置
freetds.conf
:确保freetds.conf
文件中的client charset
设置为UTF-8
。 - 使用
iconv-lite
:在 Node.js 中使用iconv-lite
库将从数据库获取的数据从指定编码(如GBK
)转换为UTF-8
。
通过上述步骤,可以有效解决 Node.js 在 Ubuntu 下连接 SQL Server 时遇到的中文乱码问题。