码迷,mamicode.com
首页 > 数据库 > 详细

vc6.0运用mysql数据库中的编码所导致的乱码问题(接收和输出的编码必须要一致)

时间:2016-06-25 16:22:49      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:

【编译中遇见的问题】

      ①在用vc 6.0去调用MySQL中的数据时,出现中文乱码

      ②不明白mysql中的码制

【开始解决问题】

     ①打开mysql控制台

技术分享

 

     ②开始展示自己

技术分享

技术分享

 

 

     ③打开vc 6.0(配置mysql环境在这里我就不哆嗦了)

走起.....在vc 6.0中复制下列代码,进行连接mysql和调用代码如下:

#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql.h> 
#include <iostream>
#pragma comment(lib, "ws2_32")  
#pragma comment(lib, "libmysql") 
using namespace std;

//-------------------------------------调用mysql数据库--------------------------------------。
void xian()
{
  //variables like ‘char%‘
  MYSQL mysql;
  MYSQL_RES *resultset;  
  MYSQL_ROW row;
  mysql_init(&mysql); 
  mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "utf8");
  cout<<"-------------------------------------------------------"<<endl;
  cout<<"| 性命 |"<<" 性别 |"<<" 年龄 |"<<" 诊断结果 |"<<" 处方 |"<<" 费用 |"<<" 时间 |"<<endl;
  cout<<"----------------------------------------------------------------"<<endl;
  if (!mysql_real_connect(&mysql, "localhost", "root", "123456", "zhaofulu", 3306, NULL, 0))  
  {  
  cout <<"\n数据库连接发生错误!";  
  }  
  else  
  { 
  if(mysql_query(&mysql,"select * from users"))
  {
  cout << "查询失败";
  }
  else
  {
  resultset = mysql_store_result(&mysql);// 获得结果集 
  if (mysql_num_rows(resultset) != NULL)  
  { 
  int numFields = mysql_num_fields(resultset);// 获得表中字段数
  
  while (row = mysql_fetch_row(resultset))  
  {  
  int i = 0;  
  for (i = 0; i < numFields; i++)  
  { 
  cout<<"| "<< row[i]<<"  ";
  }
  cout<<"|";
  cout<<endl;
  cout<<"----------------------------------------------------------------"<<endl; 
  }  
  }  
  else  
  {  
  cout<<"\n无查询结果!";  
  }  
  cout<<endl;
  
  }
  }
  
}
//---------------------------数据库的连接------------------------------。
int main()
{
    const char user[] = "root";         //username
    const char pswd[] = "123456";         //password
    const char host[] = "localhost";    //or"127.0.0.1"
    const char table[] = "zhaofulu";        //database
    unsigned int port = 3306;            //server port        
    MYSQL mysql;
    mysql_init(&mysql);
    if(mysql_real_connect(&mysql,host,user,pswd,table,port,NULL,0))
    {
        cout<<"connect succeed!"<<endl; 
xian();
    }
    else
    {
        cout<<"connect failed!"<<endl;
}
    mysql_close(&mysql);//断开连接
    return 0;
}

    ③运行vc 6.0           

【问题出现】

       运行vc 6.0之后的乱码现象截图:

技术分享

 

    出现乱码现象,没有像mysql中预先输入显示的效果(此时很是纠结)

    这时你开始研究代码,开始查资料,得到的结果都一样:编码问题

    这时你开始把代码中的一行代码挑了出来(其他都研究懂了,就剩下这一条):

    mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "utf8");//必须要在本函数全局定义 

 

    你可能会理解这是要让此函数中的所有输入和输出都以编码为utf8的格式进行

【开始解决问题】

 打开mysql控制台(查看所建的zhaofulu数据库的编码属性)

技术分享

   zhaofulu数据库的编码属性为gbk

   ②在查看在zhaofulu下的user表的所有属性

技术分享

 

所以把代码 mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "utf8");

改成 mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "latin1");

【再次运行vc 6.0】

 

技术分享

 

【另一种方法】:

在mysql控制台上用命令:set character_set_client=gbk    进行编码修改

vc6.0运用mysql数据库中的编码所导致的乱码问题(接收和输出的编码必须要一致)

标签:

原文地址:http://www.cnblogs.com/sankye/p/5616420.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!