2013-11-20 80 views
1

我有以下代碼:C++ MySQL不能連接到日本數據庫名稱

#include <iostream> 
#include <mysql/mysql.h> 
using namespace std; 

#define SERVER "localhost" 
#define USER "root" 
#define PASS "password" 
#define DB "日本語" 

int main(){ 
    MYSQL *connect; 
    connect = mysql_init(NULL); 
    if(!connect){ 
     cerr << "Error\n"; 
     return 1; 
    } 

    connect = mysql_real_connect(connect, SERVER, USER, PASS, DB, 0, NULL, 0); 
    if(!connect){ 
     cerr << "Error\n"; 
     return 1; 
    } 
    return 0; 
} 

的mysql_real_connect導致該錯誤消息是顯示器。問題是數據庫是日文的。如果我用英文連接到數據庫,我可以很好地連接。

我也嘗試將DB =「」,然後指定表爲db.table(即日本語。単語),但我試圖從表中讀取時收到分段錯誤。

任何幫助將不勝感激。

+0

你嘗試過傳遞一個utf-8字符串嗎? –

+0

你是什麼意思?你的意思是喜歡用字符串DB嗎?我嘗試過,但你需要調用DC.c_str(),因爲mysql_real_connect需要const char *。此外,MySQL數據庫使用eucjpms模式而不是utf-8,這可能很重要。 – user2534517

+0

無論您在數據庫中使用哪種編碼,都可以使用「SET NAMES」來設置utf8編碼,而mysql將進行翻譯。但在這裏,問題是建立一個連接。嘗試將servername,username和dbname中使用的寬字符串轉換爲utf-8。 –

回答

0

您可能知道,但存在不同的UTF編碼。我會檢查以下幾點:

  • 您的.cpp文件的編碼。
  • 以數組字節的形式打印DB常量。
  • 從MySQL數據庫檢索數據庫的名稱(只需連接並檢索所有數據庫名稱 - 我想你可以做到這一點)。與(2)比較。
  • 檢查MySQL文檔和數據庫以瞭解當前使用的編碼。
+0

我嘗試了你的建議。首先,我沒有問題輸出DB名稱到標準輸出。有趣的是,當我不指定數據庫名稱時,我可以正確連接到MySQL服務器,但是,當我運行show tables時,我得到:information_schema ??? mysql performance_schema test – user2534517