Я просто хочу знать - как получить 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;
}
Заранее спасибо !!