vc6.0運用mysql數據庫中的編碼所致使的亂碼問題(接收和輸出的編碼必需要一致)

【編譯中碰見的問題】mysql

      ①在用vc 6.0去調用MySQL中的數據時,出現中文亂碼ios

      ②不明白mysql中的碼制sql

【開始解決問題】數據庫

     ①打開mysql控制檯函數


 

     ②開始展現本身fetch



 

 

     ③打開vc 6.0(配置mysql環境在這裏我就不哆嗦了)編碼

走起.....在vc 6.0中複製下列代碼,進行鏈接mysql和調用代碼以下:spa

#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;
}
.net

    ③運行vc 6.0           server

【問題出現】

       運行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    進行編碼修改

相關文章
相關標籤/搜索