mysql_query无法正确保存数据

时间:2012-01-11 14:25:13

标签: c++ mysql utf-8

#include <iostream> 
#include <Windows.h>
#include <mysql.h> 
#include <string> 
#include <stdio.h>


using namespace std; 

MYSQL *connection, mysql; 
MYSQL_RES *result; 
MYSQL_ROW row; 
int query_state; 


int main(int argc, char** argv)  
{ 
    setlocale(LC_ALL, "");
      mysql_init(&mysql);    
      mysql_real_connect(&mysql,"xxx","xxx","xxx","xxx",0,0,0); 

  mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "utf8"); 
  mysql_options(&mysql, MYSQL_INIT_COMMAND, "SET NAMES 'utf8' [COLLATE 'utf8_slovak_ci']"); 

  mysql_query(&mysql, "SELECT priezvisko FROM tour_pouzivatelia WHERE id_pouz=5"); 

  result = mysql_store_result(&mysql); 
  if ((row = mysql_fetch_row(result)) != NULL) {     
        string sql; 
        sql = "UPDATE tour_pouzivatelia SET priezvisko='"; 
        sql += row[0];
        sql += "' WHERE id_pouz=2";



        char* s = new char[sql.length()];


        strcpy(s, sql.c_str());

        mysql_query(&mysql, s); 
    } 


 getchar();
  return 0; 
}

数据库中的值为+ľščťžýáíéô§ň,表格包含字符集utf8ut8_slovak_ci整理

然而,以下代码将结果保存为+¾šèžýáíéúäô§ò

我正在使用Visual Studio 2010 c ++ express。

问题似乎是mysql_query没有处理传递给它的sql,它会删除特定的字符,如š,č,ľ。我尝试了很多次转换,但函数本身要求sql为const char *

有没有办法使这项工作,以便char *变量将正确保存给定的字符?

如果我从数据库中读取值,它们会正确显示......

1 个答案:

答案 0 :(得分:3)

在任何DML之前,尝试发出SET names utf8查询(或其他您需要的)