在windows上实现了一段mysql读取数据的代码,访问远程部署在linux上的mysql服务器,mysql服务器上支持GBK以及GB2312编码。我使用以下字段,取得的中文全为“??”,尝试过做转码,但老是转不对,请教各位高手,谢谢!mysql_init(&mysql);
if (mysql_real_connect(&mysql,DBSERVER,DBUSER,DBPASSWORD,DATABASE,0,NULL,0) == NULL) {
printf("connected failed %s!\n", mysql_error(&mysql));
goto CLEANUP;
}
if (mysql_select_db(&mysql,DATABASE) != 0) {
printf("select DB failed %s %d!\n", mysql_error(&mysql), mysql_errno(&mysql));
goto CLEANUP;
}
if (mysql_real_query(&mysql,sql_select,select_len) != 0) {
printf("execute query error %s!\n", mysql_error(&mysql));
goto CLEANUP;
} if (NULL == (res_set = mysql_store_result(&mysql))) {
printf("store result error %s!\n", mysql_error(&mysql));
goto CLEANUP;
}
affectedRows = (long)mysql_num_rows(res_set);
if (affectedRows < 0) {
printf("get result error %s!\n", mysql_error(&mysql));
goto CLEANUP;
} else if (affectedRows == 0) {
printf("store result error %s!\n", mysql_error(&mysql));
goto CLEANUP;
} num_fields = mysql_num_fields(res_set);
fields = mysql_fetch_fields(res_set);
//print column name
for(i = 0; i < num_fields; i++)
{
printf("%s\t", fields[i].name);
}
printf("\n");
while(NULL != (row = mysql_fetch_row(res_set))) {
for(i = 0; i < num_fields; i++)
{
printf("%s\t", row[i]); //此处遇到中文会出现乱码
}
printf("\n");
}
CLEANUP:
if (NULL != res_set) {
mysql_free_result(res_set);
}
mysql_close(&mysql);急啊!!!
if (mysql_real_connect(&mysql,DBSERVER,DBUSER,DBPASSWORD,DATABASE,0,NULL,0) == NULL) {
printf("connected failed %s!\n", mysql_error(&mysql));
goto CLEANUP;
}
if (mysql_select_db(&mysql,DATABASE) != 0) {
printf("select DB failed %s %d!\n", mysql_error(&mysql), mysql_errno(&mysql));
goto CLEANUP;
}
if (mysql_real_query(&mysql,sql_select,select_len) != 0) {
printf("execute query error %s!\n", mysql_error(&mysql));
goto CLEANUP;
} if (NULL == (res_set = mysql_store_result(&mysql))) {
printf("store result error %s!\n", mysql_error(&mysql));
goto CLEANUP;
}
affectedRows = (long)mysql_num_rows(res_set);
if (affectedRows < 0) {
printf("get result error %s!\n", mysql_error(&mysql));
goto CLEANUP;
} else if (affectedRows == 0) {
printf("store result error %s!\n", mysql_error(&mysql));
goto CLEANUP;
} num_fields = mysql_num_fields(res_set);
fields = mysql_fetch_fields(res_set);
//print column name
for(i = 0; i < num_fields; i++)
{
printf("%s\t", fields[i].name);
}
printf("\n");
while(NULL != (row = mysql_fetch_row(res_set))) {
for(i = 0; i < num_fields; i++)
{
printf("%s\t", row[i]); //此处遇到中文会出现乱码
}
printf("\n");
}
CLEANUP:
if (NULL != res_set) {
mysql_free_result(res_set);
}
mysql_close(&mysql);急啊!!!
每次连接mysql成功后需要先执行sql: SET NAMES gb2312 然后的操作才不会出现乱码
http://shop33712512.taobao.com
淘宝店,专卖化妆品、自家蜂产品
==========广告签名============
ADOConnection.Execute('set character_set_connection=gbk',cmdText);
ADOConnection.Execute('set character_set_results=gbk',cmdText);
ADOConnection.Execute('set character_set_client=gbk',cmdText);
if (!(sock = mysql_real_connect(&mysql,NULL,"admin","admin","vckbase",0,NULL,0)))
{
sprintf(ss,"Couldn't connect to engine!\n%s\n\n",mysql_error(&mysql));
MessageBox( ss );
perror("");
return;
}
if (!mysql_set_character_set(&mysql, "gbk"))
{
sprintf( ss, "New client character set: %s\n", mysql_character_set_name(&mysql) );
MessageBox( ss );
}
数据库请使用 utf-8看看这里,
http://www.vckbase.com/code/listcode.asp?mclsid=11&sclsid=1121MySql C API 的 C++ 包装 详细信息 < MySQL >
mysql 数据访问问题基本搞定