最近在做一個項目的過程中會遇到node下創建MySQL連接池,請求遠程服務器數據時,出現中文亂碼。這個問題也是困擾了好久,網上查閱了較多資料,說是因為node暫不支持GBK轉碼,要導入第三方包,初試沒能成功,最后在mysql源碼中找到內置字符集定義,用charset成功解決。
在github上找到MySQL的npm包源碼,找到charset.js字符集文件,里面有MySQL定義的所有字符集,作為連接時charset的可選屬性(有些可能已經失效)。
image
因為utf8以及GBK都沒用,最終在多次嘗試后(笨辦法),用UTF8_GENERAL50_CI完美解決。
1586489836(1).jpg
//創建連接池
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');//具體用法建議查看文檔
}