mysql_query не сохраняет данные должным образом - PullRequest
2 голосов
/ 11 января 2012
#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; 
}

Значение в базе данных +ľščťžýáíéô§ň, таблицы имеют кодировку utf8 и ut8_slovak_ci параметры сортировки

Тем не менее следующий код сохраняет результат как +¾šèžýáíéúäô§ò.

Я использую Visual Studio 2010 C ++ Express.

Кажется, проблема в том, что mysql_query не обрабатывает передаваемый ему sql, он удаляет определенные символы, такие как š, č, ľ.Я перепробовал много преобразований, однако сама функция требует, чтобы sql был равен const char *.

Есть ли способ заставить это работать, чтобы переменная char * правильно сохраняла данные символы?

Если я читаю значения из базы данных, они отображаются правильно ...

1 Ответ

3 голосов
/ 11 января 2012

Перед любым DML, попробуйте выполнить SET names utf8 запрос (или другой, который вам нужен)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...