nodejs 查询mysql数据库的数据显示乱码

nodejs 查询mysql数据库的数据显示乱码

运行nodejs代码,结果如下:

D:\Program Files\nodejs>NODE E:\project\test\sqlServer.js
[ RowDataPacket { id: 1, name: 'ÕÅÈý', sex: 'Å®' },
RowDataPacket { id: 2, name: 'ÕÅÄÐ', sex: 'Å®' } ]
[ RowDataPacket { id: 1, name: 'ÕÅÈý', sex: 'Å®' },
RowDataPacket { id: 2, name: 'ÕÅÄÐ', sex: 'Å®' } ]

nodejs代码如下:
var mysql=require('mysql');
var client = mysql.createConnection({
user: 'root',
password: '',
database:'user',
});
client.connect(function (err) {

if(err)
    console.log('与mysql数据库建立连接失败');

});
client.query(
'SELECT * FROM userinfo',
function selectCb(err, results, fields) {

if (err) {  
  console.log(err);
} 
else{      
  if(results)
  {
      for(var i = 0; i < results.length; i++)
      {
          console.log(results);
      }
  }  
  else{
      console.log("失败");
  }  
  }    
client.end();  

}
);

mysql数据库的语句如下:

create database user character set UTF8;

use user;

create table userinfo
(
id int primary key auto_increment not null,
name varchar(20) not null,
sex varchar(2) not null
);

insert into userinfo
(name,sex)
values
('张三','女');
insert into userinfo
(name,sex)
values
('张男','女');

在mysql下查询的结果:

图片描述

请问这个问题应该怎样解决?还望路过大虾指点迷津。

阅读 7.4k
3 个回答

连接加一个参数charset试试?

var client = mysql.createConnection({ 
user: 'root', 
password: '',
database:'user',
charset:'UTF8_GENERAL_CI'
});

或者在默认的mysqld的配置文件my.ini中的mysqld节加入character-set-server=utf8后,然后重启mysqld服务(我使用的是mariadb,不确定这个配置是否可以在mysql中使用)

连上数据库之后看下SHOW VARIABLES LIKE ‘character%’;

如果不是utf8的,在配置文件中全部改掉,有好几个参数的,都改掉,然后重启

mysql.createConnection里面确认下指定字符集是不是用的charset关键字

其实数据库乱码在加上 utf8 charset 之后已经好了。
这个乱码是 http 服务器那里的问题,你需要在头部添加 res.setHeader('Content-Type', 'text/plain; charset=utf-8'); 这样的配置。

之前是这样的乱码:

clipboard.png

clipboard.png

加上之后就解决了:

clipboard.png

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题