2012-01-11 4 views
2
#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 сверкуmysql_query не сохраняет данные правильно

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

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

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

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

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

ответ

3

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

+0

Wow, что помогло за содержание от базы данных, так что теперь работает (хотя я бы поклялся, что я это пробовал раньше), nvm спасибо :) – user1143348

+0

хотя он все еще не работает для sql = "UPDATE tour_pouzivatelia SET priezvisko = 'aľšč' WHERE id_pouz = 1;"; он просто сохраняет один, а не остальные символы – user1143348

+0

У вас был жесткий код запроса UPDATE? Может быть, файл не в кодировке UTF8. Попробуйте проверить, будет ли VS2010 кодировать файл в UTF8 (даже если show ok) http: // stackoverflow .com/вопросы/696627 /, как в настройке-стандарта кодирования-в-зрительно-студия – rkosegi

Смежные вопросы