VC6.0下使用ODBC连接mysql出现乱码
mysql字符集是GB2312,在数据库中没有任何问题,试过用JSP连接数据库也没有乱码,最近用VC6.0下用ODBC连接MYSQL然后select出来的东西显示出来全都是问号????,英文没有什么问题,使用INSERT插入也没有什么问题。代码
CDatabase db;
db.Open(NULL,FALSE,FALSE,"ODBC;DSN=book;UID=root;PWD=123451");
CRecordset rs(&db);
rs.Open(CRecordset::forwardOnly,_T("select * from book;")); 有类似问题,SQL前加set names gb2312;试试
或参考标签:
http://www.mysqlpub.com/tag.php?name=%C2%D2%C2%EB 有类似问题,SQL前加set names gb2312;试试
或参考标签:
http://www.mysqlpub.com/tag.php?name=%C2%D2%C2%EB
kider 发表于 2008-11-18 20:09 http://www.mysqlpub.com/images/common/back.gif
能不能具体说一下前面指的是哪?那么我的SQL语句因该改成什么? rs.Open(CRecordset::forwardOnly,_T("set names gb2312;select * from book;")); rs.Open(CRecordset::forwardOnly,_T("set names gb2312;select * from book;"));
kider 发表于 2008-11-18 23:47 http://www.mysqlpub.com/images/common/back.gif
加上之后编译没有错误,一执行就报错debug assertion failed 5# liangc
找了两天终于解决了,最后还是放弃了使用MFC提供的类,直接使用了mysql提供的API来连接数据库,加上一行语句
mysql_query(&mysql, "SET NAMES 'gb2312'");
具体代码如下:
MYSQL mysql;
mysql_init(&mysql);
if(!mysql_real_connect(&mysql,"localhost","root","123451","book",3306,NULL,0))
{
MessageBox("数据库连接失败");
return FALSE;
}
mysql_query(&mysql, "SET NAMES 'gb2312'");//加上这句就好了
char *ch_query;
ch_query="select * from book";
if(mysql_real_query(&mysql,ch_query,(UINT)strlen(ch_query))!=0)
{
MessageBox("数据库表格出错");
}
CString str;
MYSQL_RES *result;
MYSQL_ROW row;
if(!(result=mysql_use_result(&mysql)))
{
MessageBox("读取数据集失败");
}
int i=0;
while(row=mysql_fetch_row(result))
{
//做你要做的事情
i++;
}
mysql_free_result(result);//释放结果集
mysql_close(&mysql);//释放数据库连接 6# liangc
顺便说一句:挺喜欢这个论坛的,也挺喜欢MYSQL的 :victory:
你的问题总结很经典...
页:
[1]