请问nodejs-mysql-native 如何访问非utf8字符集的数据库
发布于 13 年前 作者 cckowin 7751 次预览 最后一次回复是 13 年前 来自
数据库表如下
CREATE TABLE `um_department` (
`deptid` int(11) NOT NULL AUTO_INCREMENT,
`dept` varchar(64) NOT NULL DEFAULT '',
`dupid` int(11) DEFAULT '0',
`deptshow` varchar(127) DEFAULT '',
PRIMARY KEY (`deptid`)
) ENGINE=MyISAM AUTO_INCREMENT=74 DEFAULT CHARSET=gbk
采用下面方法访问的结果显示的是乱码
db=require("mysql-native").createTCPClient(config.dbHost);
db.auto_prepare=true;
db.auth(config.dbNameofApp,config.dbPass,config.dbUser);
db.query("set names gbk");
app.get('/test', function(req, res) {
var rest = [];
db.query("use " + config.dbNameofApp);
db.query("SELECT * from um_department where dupid = '1'")
.on("row", function(r) {
rest.push({
deptid: r.deptid,
dept: r.dept,
dupid: r.dupid,
deptshow: r.deptshow
});
})
.on("end", function(r) {
res.end(JSON.stringify(rest));
});
});
请问如何访问呢才能正常显示中文呢
8 回复
是不是采用这种形式
但是还是乱码 我新建了个表
在里面插入了一条数据
然后查询
输出
<Buffer c3 84 c3 a3 c2 ba c3 83>但是
你好的gbk编码是c4e3 bac3,utf8编码是e4bd a0e5 a5bd我不知道我查出来的数据是啥编码了你这样是不行的 因为mysql在取数据的时候就已经转成utf8 你在收到之后转换是没用的 我是用node-mysql,在接收包的时候就先判断编码直接转换 转换我是用iconv不是lite
那请问在哪里修改呢,在哪能取到未转化前的数据呢,还有顺便问一下如何插入中文数据啊,是不是也有问题啊,谢谢
@saighost 谢谢帮忙,你得到的结果是
是因为查询前没有加上这行代码 db.query(“set names gbk”);
刚才在看node-mysql-native的原代码的时候发现了这行代码
原来它是把数据读到string,而不是buffer中的,试了一下直接访问string 的每个字符
string.charAtCode(i),发现成功了结果如下