zoukankan      html  css  js  c++  java
  • vc6.0运用mysql数据库中的编码所导致的乱码问题(接收和输出的编码必须要一致)

    【编译中遇见的问题】

          ①在用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 <<" 数据库连接发生错误!";  
      }  
      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<<" 无查询结果!";  
      }  
      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    进行编码修改

  • 相关阅读:
    516. 最长回文子序列
    NC50493 环形石子合并
    NC16650 采药
    NC16664 合唱队形
    NC51170 石子合并
    148. 合并果子
    NC25138 子串查询
    二维数组对角线 的 规律
    如何讲一个网页转换为jpg?(图片!)
    Java两倍 犯错题
  • 原文地址:https://www.cnblogs.com/sankye/p/5616420.html
Copyright © 2011-2022 走看看