您的位置:首页 > 数据库 > MySQL

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

2016-06-25 15:41 519 查看
【编译中遇见的问题】

①在用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;
}


[b]③运行vc 6.0[/b]

【问题出现】

运行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 进行编码修改
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: