最近在做一个项目的过程中会遇到node下创建MySQL连接池,请求远程服务器数据时,出现中文乱码。这个问题也是困扰了好久,网上查阅了较多资料,说是因为node暂不支持GBK转码,要导入第三方包,初试没能成功,最后在mysql源码中找到内置字符集定义,用charset成功解决。
在github上找到MySQL的npm包源码,找到charset.js字符集文件,里面有MySQL定义的所有字符集,作为连接时charset的可选属性(有些可能已经失效)。
因为utf8以及GBK都没用,最终在多次尝试后(笨办法),用UTF8_GENERAL50_CI完美解决。
//创建连接池
var sqlPool = mysql.createPool({
host : 'xx.xx.xx.xx',
user : 'xx',
password : '****',
database:'xx',
charset: 'UTF8_GENERAL50_CI'});
如果这种方法不行的话,就只能试导入第三方包,这里提供一个第三方包‘iconv-lite’,在请求到数据回来时,对数据做一层处理。
var iconv = require('iconv-lite');
//使用
if(type=="xx"){//你的判断
return iconv.encode(SarchName, 'utf8');//具体用法建议查看文档
}