Обработайте данные utf-8 из MySQL в C ++ и верните результат - PullRequest
2 голосов
/ 13 ноября 2011

Я просто хочу знать - как получить MySQL результаты в C ++ в строке (или другой подобный тип данных "string") таким образом, чтобы не искажал данные, сохраненные в utf8_unicode_ci .

После процесса C ++ приложение должно записать результаты обратно (в другую таблицу) в базу данных, где аргумент также закодирован в utf8_unicode_ci.

Я где-то читал, что использование wide char не рекомендуется консорциумом Unicode, но моя проблема по-прежнему в том, что вторым аргументом для mysql_query () является строка, которая недостаточно широка.

Я уже пробовал некоторые решения "utf8 string", но безуспешно. Я также пытался сохранить данные в общей строке и затем записать их в базу данных таким же образом (байт за байтом), но он не работает должным образом ... (см. Мой код ниже)

БАЗА ДАННЫХ:

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

Заранее спасибо !!

1 Ответ

4 голосов
/ 13 ноября 2011

С 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)); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...