2011-10-22 113 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