2011-10-22 115 views
0

我想将数据发送到MySQL数据库,用下面的代码:C++写入MySQL数据库的utf8字符?

#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

您是否将mysql字段中的字符编码设置为UTF8,或者它是否为不支持国际字符的latin1。

您可以设置字段编码是这样的:

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


编辑1

如果这不是解决办法,这可能是一个Visual Studio的问题,这是可以解决的像这样:

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

你需要使用转换器将'攻壳机动队'转换为一个Unicode字符串,如this one here

我选择了UTF = 8的但我无法知道这些是正确的还是如何使用它们,你需要找出哪一个是正确的顺序和错误我害怕。

为了让您的生活更轻松,您可以链接到library,这可能会为您做到这一切。

source is here

+0

你是什么意思的MySQL领域? 在phpmyadmin中,数据库设置为:utf8_general_ci – gijs007

+0

'varchar'字段可以设置为特定的字符编码,我上一个项目与您的问题相同,但它们都设置为latin1,这是问题所在。我忘了怎么做,但没有测试装备:(。 – Serdalis

+1

@ gijs007:'utf8_general_ci'是一个**排序规则**而不是一个编码。确保该列有'utf8'编码,并且连接本身是'utf8'编码的('SET NAMES utf8;')。 – Crozin