c 调用mysql返回utf8,在C ++中处理来自MySQL的utf-8数据并返回结果

I just simply want to know - how to get MySQL results to C++ in string (or another similar "string" datatype) in a way that would not deform data saved in utf8_unicode_ci.

After C++ process, app should write results back (to another table) into the database where argument is encoded in utf8_unicode_ci as well.

I read somewhere that using wide char is not recommended by Unicode consortium, but my problem is still that a second argument for mysql_query() is string which is not wide enough.

I've already tried some "utf8 string" solutions, but unsuccessfully. I also tried to save data in common string and than write it into the database in the same way (byte after byte), but it doesn't work properly at all... (see my code below)

DATABASE:

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

AFTER PROCESS: save_newtext: text = ?š??žýáíé

#include

#include

#include

#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;

}

Thanks in advance!!

解决方案mysql_options() should be called after mysql_init() and before

mysql_connect() or mysql_real_connect().

So your code should be

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));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值