为了账号安全,请及时绑定邮箱和手机立即绑定

用c++操作mysql,没有中文却在查询时出现乱码

用c++操作mysql,没有中文却在查询时出现乱码

CyanDK 2017-09-04 19:38:23
//#include "stdafx.h" #include <iostream> #include "VspdCTOMySQL.h" using namespace std; int main(int argc, char* argv[]) {     char* host = "localhost";     char* user = "root";     char* port = "3306";     char* passwd = "123456";     char* dbname = "database2";     char* charset = "utf8";     char* Msg = "";//消息变量                    //初始化     VspdCToMySQL * vspdctomysql = new VspdCToMySQL;     if (vspdctomysql->ConnMySQL(host, port, dbname, user, passwd, charset, Msg) == 0)         cout << "连接成功" << endl;     else         cout<<"连接失败" << endl;     //查询     char * SQL = "select * from table2";     string str = vspdctomysql->SelectData(SQL, 3, Msg);//检索到的字符串     if (str.length() > 0)     {         cout << "查询成功" << endl;         cout<<str.data()<<endl;     /*    cout << str.data() << endl;*/         /*cout << str.c_str() << endl;*/              }     else     {         cout<<"查询失败"<<endl;     }     //插入     //SQL = "insert into vcaccesstest(ids,username,passwd,address) values(4,'我的','123210','测试地址')";     //if (vspdctomysql->InsertData(SQL, Msg) == 0)     //    printf("插入成功/r/n");     ////更新     //SQL = "update vcaccesstest set username = '修改了',passwd='2345' where ids = 3 ";     //if (vspdctomysql->UpdateData(SQL, Msg) == 0)     //    printf("更新成功/r/n");      ////删除     //SQL = "delete from vcaccesstest where ids = 3 ";     //if (vspdctomysql->DeleteData(SQL, Msg) == 0)     //    printf("删除成功/r/n");     /*vspdctomysql->CloseMySQLConn();*/     system("pause");     return 0; }//#include "stdafx.h" #include "VspdCTOMySQL.h" VspdCToMySQL::VspdCToMySQL() { } VspdCToMySQL::~VspdCToMySQL() { } //初始化数据 int VspdCToMySQL::ConnMySQL(char *host, char * port, char * Db, char * user, char* passwd, char * charset, char * Msg) {     if (mysql_init(&mysql) == NULL)     {         Msg = "inital mysql handle error";         return 1;     }     if (mysql_real_connect(&mysql, host, user, passwd, Db, 0, NULL, 0) == NULL)     {         Msg = "Failed to connect to database: Error";         return 1;     }     if (mysql_set_character_set(&mysql, "utf8") != 0)     {         Msg = "mysql_set_character_set Error";         return 1;     }     return 0; } //查询数据 string VspdCToMySQL::SelectData(char * SQL, int Cnum, char * Msg) {     MYSQL_ROW m_row;     MYSQL_RES *m_res;     char sql[2048];     sprintf_s(sql, SQL);     int rnum = 0;     char rg = 0x06;//行隔开     char cg = { 0x05 };//字段隔开     if (mysql_query(&mysql, sql)!=0)     {         Msg = "select ps_info Error";         return "";     }     m_res = mysql_store_result(&mysql);     if (m_res == NULL)     {         Msg = "select username Error";         return "";     }     string str("");     while (m_row = mysql_fetch_row(m_res))     {         for (int i = 0; i < Cnum; i++)//Cnum是列数         {             str += m_row[i];             //str += rg;         }     //    str += rg;         rnum++;     }     mysql_free_result(m_res);     return str; } //插入数据 int VspdCToMySQL::InsertData(char * SQL, char * Msg) {     char sql[2048];     sprintf_s(sql, SQL);     if (mysql_query(&mysql, sql) != 0)     {         Msg = "Insert Data Error";         return 1;     }     return 0; } //更新数据 int VspdCToMySQL::UpdateData(char * SQL, char * Msg) {     char sql[2048];     sprintf_s(sql, SQL);     if (mysql_query(&mysql, sql) != 0)     {         Msg = "Update Data Error";         return 1;     }     return 0; } //删除数据 int VspdCToMySQL::DeleteData(char * SQL, char * Msg) {     char sql[2048];     sprintf_s(sql, SQL);     if (mysql_query(&mysql, sql) != 0)     {         Msg = "Delete Data error";         return 1;     }     return 0; } //关闭数据库连接 void VspdCToMySQL::CloseMySQLConn() {     mysql_close(&mysql); }#pragma once #include <stdio.h> #include <string> #include <winsock.h> #include <mysql.h> using   namespace   std; class VspdCToMySQL { public:     //变量     MYSQL mysql;     /*     构造函数和稀构函数     */     VspdCToMySQL();     ~VspdCToMySQL();     /*     主要的功能:     初始化数据库     连接数据库     设置字符集     入口参数:     host :MYSQL服务器IP     port:数据库端口     Db:数据库名称     user:数据库用户     passwd:数据库用户的密码     charset:希望使用的字符集     Msg:返回的消息,包括错误消息     出口参数:     int :0表示成功;1表示失败     */     int ConnMySQL(char *host, char * port, char * Db, char * user, char* passwd, char * charset, char * Msg);     /*     主要的功能:     查询数据     入口参数:     SQL:查询的SQL语句     Cnum:查询的列数     Msg:返回的消息,包括错误消息     出口参数:     string 准备放置返回的数据,多条记录则用0x06隔开,多个栏位用0x05隔开     如果 返回的长度= 0,责表示舞结果     */     string SelectData(char * SQL, int Cnum, char * Msg);     /*     主要功能:     插入数据     入口参数     SQL:查询的SQL语句     Msg:返回的消息,包括错误消息     出口参数:     int :0表示成功;1表示失败     */     int InsertData(char * SQL, char * Msg);     /*     主要功能:     修改数据     入口参数     SQL:查询的SQL语句     Msg:返回的消息,包括错误消息     出口参数:     int :0表示成功;1表示失败     */     int UpdateData(char * SQL, char * Msg);     /*     主要功能:     删除数据     入口参数     SQL:查询的SQL语句     Msg:返回的消息,包括错误消息     出口参数:     int :0表示成功;1表示失败     */     int DeleteData(char * SQL, char * Msg);     /*     主要功能:     关闭数据库连接     */     void CloseMySQLConn(); };代码如上截图如下(是utf8)(待查询表中内容)(编译后。。。。)请问是哪里出错了呢?新手求教
查看完整描述

1 回答

?
ypcFly

TA贡献8条经验 获得超0个赞

只要是乱码我觉得都是字符集的问题,没记错的话mysql默认的字符集是latin

查看完整回答
反对 回复 2017-09-04
  • CyanDK
    CyanDK
    可是在倒数第三张图上查出来那个database的字符集是utf8啊 会不会是SelectData函数返回string 对象时出问题了呢
  • 1 回答
  • 0 关注
  • 1699 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信