2012-01-11 104 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; 
} 

在數據庫中的值是+ľščťžýáíéô§ň,該表已字符集utf8ut8_slovak_ci整理的mysql_query不保存數據正確

然而,下面的代碼並將結果保存爲+¾šèžýáíéúäô§ò

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

問題似乎是mysql_query不處理傳遞給它的sql,它刪除了特定的字符,如š,č,ľ。我已經嘗試了很多轉換,但是函數本身需要sql爲const char *

有什麼辦法可以使這項工作,以便char *變量將正確保存給定的字符?

如果我讀了數據庫中的值,他們正確顯示...

回答

3

任何DML之前,嘗試發出SET names utf8查詢(或其他你需要)

+0

哇,這有助於從內容數據庫,所以現在的作品(雖然我發誓我之前嘗試過),nvm謝謝:) – user1143348 2012-01-11 14:48:47

+0

雖然它仍然不適用於sql =「更新tour_pouzivatelia SET priezvisko ='aľšč'WHERE id_pouz = 1;」;它只是保存了一個單獨的字符,而不是其他字符 – user1143348 2012-01-11 14:49:25

+0

您是否已經硬編碼UPDATE查詢?也許文件不是UTF8編碼。請檢查VS2010是否使用UTF8編碼文件(即使顯示正常)http:// stackoverflow .COM /問題/ 696627 /如何對標準的編碼,在視覺設置工作室 – rkosegi 2012-01-11 18:20:50