繁体   English   中英

在C ++中处理来自MySQL的utf-8数据并返回结果

[英]Process utf-8 data from MySQL in C++ and give result back

我只是想知道-如何以不会破坏保存在utf8_unicode_ci中的数据变形的方式, 以字符串 (或其他类似的“字符串”数据类型)的形式将MySQL结果转换为C ++

经过C ++处理后,应用程序应将结果写回 (到另一个表中)到数据库中,参数也在utf8_unicode_ci中进行编码。

我在某处读到,Unicode联盟不建议使用宽字符 ,但是我的问题仍然是mysql_query()的第二个参数是字符串,它不够宽。

我已经尝试了一些“ utf8字符串”解决方案,但未成功。 我还尝试将数据保存在通用字符串中,然后以相同的方式(逐字节)将其写入数据库,但是它根本无法正常工作...(请参阅下面的代码)

数据库:

save_text:文本=ěščřžýáíé

处理后:save_newtext:text =?š??žýáíé

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

#define ... // server conection

using namespace std;

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

int main(int argc, char** argv) 
{
  mysql_init(&mysql);   
  mysql_real_connect(&mysql,CTH_SERVER,CTH_USER,CTH_PASSWORD,CTH_DB_IN,0,0,0));

  mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "utf8");
  mysql_options(&mysql, MYSQL_INIT_COMMAND, "SET NAMES utf8");

  mysql_query(connection, "SELECT text FROM save_text WHERE id = 23");

  result = mysql_store_result(connection);
  if ((row = mysql_fetch_row(result)) != NULL) {    
        string sql;
        sql = "INSERT INTO save_newtext (text) VALUES ('";
        sql += row[0];
        sql += "')";

        mysql_query(connection, sql.c_str());
    }

  return 0;
}

提前致谢!!

MySQL参考

mysql_options()应该在mysql_init()之后,mysql_connect()或mysql_real_connect()之前调用。

所以你的代码应该是

  mysql_init(&mysql);    
  mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "utf8"); 
  mysql_options(&mysql, MYSQL_INIT_COMMAND, "SET NAMES utf8"); 

  mysql_real_connect(&mysql,CTH_SERVER,CTH_USER,CTH_PASSWORD,CTH_DB_IN,0,0,0)); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM