在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);急啊!!!

解决方案 »

  1.   

    看起来用的是mysql的C api 
    每次连接mysql成功后需要先执行sql: SET NAMES gb2312 然后的操作才不会出现乱码
      

  2.   

    建立连接以后,调用一次 SET NAMES GB2312==========广告签名============
    http://shop33712512.taobao.com
    淘宝店,专卖化妆品、自家蜂产品
    ==========广告签名============
      

  3.   

    在 AfterConnect 做如下操作
        ADOConnection.Execute('set character_set_connection=gbk',cmdText);
        ADOConnection.Execute('set character_set_results=gbk',cmdText);
        ADOConnection.Execute('set character_set_client=gbk',cmdText);
      

  4.   

    自己改一下代码 这是 delphi中的代码, 中文支持就没问题了
      

  5.   

    mysql_init(&mysql);
    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 );
    }
      

  6.   

    重点在mysql_set_character_set(&mysql, "gbk")) 函数。
      

  7.   


    数据库请使用  utf-8看看这里,
    http://www.vckbase.com/code/listcode.asp?mclsid=11&sclsid=1121MySql C API 的 C++ 包装 详细信息 < MySQL >
    mysql 数据访问问题基本搞定