【问题标题】:mysql_query does not save data properlymysql_query 没有正确保存数据
【发布时间】:2012-01-11 22:34:00
【问题描述】:
#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 * 变量正确保存给定的字符?

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

【问题讨论】:

    标签: c++ mysql utf-8


    【解决方案1】:

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

    【讨论】:

    • 哇,这有助于数据库中的内容,现在可以使用(虽然我发誓我以前尝试过),nvm 谢谢:)
    • 虽然它仍然不适用于 sql = "UPDATE tour_pouzivatelia SET priezvisko='aľšč' WHERE id_pouz=1;";它只是单独保存 a,而不是其他字符
    • 您是否对 UPDATE 查询进行了硬编码?可能文件不是 UTF8 编码。尝试检查 VS2010 是否以 UTF8 编码文件(即使显示正常)stackoverflow.com/questions/696627/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 2017-02-14
    相关资源
    最近更新 更多