C ++ записать в базу данных mysql в utf8 символов? - PullRequest
0 голосов
/ 22 октября 2011

Я хочу отправить данные в базу данных Mysql со следующим кодом:

#include "StdAfx.h"
#include <iostream>
#include "my_global.h"
#include "mysql.h"
#pragma comment(lib, "libmysql")
#pragma comment(lib, "mysqlclient")
using namespace std;

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

int main() 
{mysql_init(&mysql);
//connection = mysql_real_connect(&mysql,"host","user","password","database",0,0,0);
connection = mysql_real_connect(&mysql,"localhost","testc++","mypassword","testc++",0,0,0);
if (connection == NULL) 
cout << mysql_error(&mysql) << endl;
else
cout << "connection established" << endl;
mysql_query(connection, "CREATE TABLE writers(name VARCHAR(25))");

mysql_query(connection, "INSERT INTO writers VALUES('攻殻機動隊')");
mysql_query(connection, "INSERT INTO writers VALUES('ブルージェンダー')");
mysql_query(connection, "INSERT INTO writers VALUES('Honore de Balzac')");
mysql_query(connection, "INSERT INTO writers VALUES('Lion Feuchtwanger')");
mysql_query(connection, "INSERT INTO writers VALUES('Emile Zola')");
query_state = mysql_query(connection, "select user_count()");
if (query_state !=0) {
cout << mysql_error(connection) << endl;


mysql_close(connection);

cin.get();
// This code disconnects the mysql connection.
mysql_free_result(result);
mysql_close(connection);
return 1;
}

У меня проблема в том, что японские значки сохраняются как ???? вместо ブ ル ー ジ ェ ン ダ ー Как бы я это исправить? Я использую Visual Studio 2010.

1 Ответ

1 голос
/ 22 октября 2011

Вы установили кодировку символов в поле mysql на UTF8 или это latin1, который не поддерживает международные символы.

Вы можете установить кодировку поля следующим образом:

"CREATE TABLE writers(name VARCHAR(25) CHARACTER SET utf8 COLLATE utf8_unicode_ci)"


РЕДАКТИРОВАТЬ 1

Если это не решение, это может быть проблема визуальной студии, которую можно решить следующим образом:

wchar_t query_string = L"INSERT INTO writers VALUES('攻殻機動隊')";

вам нужно будет преобразовать '攻殻機動隊' в строку Unicode, используя конвертер, такой как этот здесь

Я выбрал UTF = 8, но у меня нет возможности узнать, правильны ли они или как их использовать, вам нужно выяснить, какая из них является правильной последовательностью, следуя ошибкам и следам, я боюсь.

Чтобы сделать вашу жизнь проще, вот ссылка на библиотеку , которая может сделать все это для вас.

источник здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...