【问题标题】:Process utf-8 data from MySQL in C++ and give result back在 C++ 中处理来自 MySQL 的 utf-8 数据并返回结果
【发布时间】:2011-11-13 14:17:37
【问题描述】:

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

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

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

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

数据库:

save_text: 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;
}

提前致谢!!

【问题讨论】:

  • 如果您提供一些您已经尝试过的代码会有所帮助,因此我们可以尝试诊断问题。
  • 您的具体问题是什么?您可以将 UTF-8 存储在字符串中,可以毫无问题地读取和写入文件。
  • @Polynomial 好的,我的代码在这里...
  • @themel 我知道,但它没有正确传输到数据库......我不知道为什么。我真的很绝望,无法解决的问题......:D

标签: c++ mysql utf-8


【解决方案1】:

来自MySQL Reference

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

【讨论】:

    猜你喜欢
    • 2012-01-20
    • 2012-07-27
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    相关资源
    最近更新 更多