1. 程式人生 > >VC遠端連線MYSQL失敗原因收集:mysql_real_connect()

VC遠端連線MYSQL失敗原因收集:mysql_real_connect()

mysql_real_connect() 試圖建立到執行host 的一個MySQL 資料庫引擎的一個連線。其函式原形為:

   MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned int client_flag)    

   我要編一段程式用來遠端連線一個mysql資料庫。我在資料庫的本機上做試驗,發現mysql_real_connect()的第二個引數設 為"localhost"時可以正常連線,當改寫為該機器的IP地址"192.168.100.2"時就連線失敗。我在程式中寫的原句為: mysql_real_connect(mysql,"192.168.100.2","root","","mydns",0,NULL,0)。
   最初,我以為將"localhost"改為"192.168.100.2"之後要將第六個引數埠號寫上,但還是不行。由於我是在Linux上做的,所以 想也許需要將第七個引數unix_socket寫上,結果還是不行。於是到google找解決方法,發現要遠端連線mysql需要為mysql的指定帳號 設定遠端連線的許可權。在我的程式中,就要為root設定這一許可權。事實證明,我之前連線失敗正是由於這個原因導致的。但問題是,網上被廣泛轉貼的方法是錯 誤的,我照做後還不行,最後問了同學才解決的。下面我具體說一下,望大家不會再被誤導。    在mysql資料庫中有一個mysql庫,它裡面包含一個user表,裡面存有所有帳號及它們的許可權及特徵。對應我的user表中找到User項為 root的,發現有兩項,其Host項分別為localhost和localhost.localdomain。我們只需要把'localhost'改為 '%'就可以讓所有遠端機器以root帳號登陸mysql伺服器。也可以將'localhost'改為某一個ip地址,這樣就可以在該地址的機器上登陸 mysql伺服器。這些都沒有問題,只是網上被廣為傳頌的一個更改Host項的方法是錯誤的。他的方法是用update語句將指定User項的Host項 改過來,如果想新增一個新的用於遠端訪問的帳號,就用insert語句新增。事實是這根本不行,我按照作了,表是變了,但還是連不上。後來經過詢問才知 道,要想改,結合我的情況,必須用下面的這條語句:      grant all privileges on mydns.* to 
'root'@'%'
 ; 來改變root帳號的許可權。如果新增新帳號也是如此。想必這個表比較特殊,用普通的SQL語句不能操作。如果帳號有密碼,後面再加上identified by '***'(*為你帳號的密碼)就可以了。    為了解決這個問題用了一下午的時間,費了不少周折,寫出來也能讓大家少走些彎路。


MYSQL *  STDCALL mysql_real_connect(MYSQL *mysql,  //
const char *host, //連線主機
        const char *user, //資料庫使用者
        const char *passwd, //資料庫密碼
        const char *db, //資料庫
        unsigned int port,//埠
        const char *unix_socket,
        unsigned int clientflag);

VC一可用的當寫漢字到mysql 表裡時就看到亂碼, 要設字元編碼.
mysql_options(conn, MYSQL_SET_CHARSET_NAME, "gb2312"); //設字元編碼
mysql_query(myData,"set names 'gbk'"); 設字元編碼 ****************************************************************************
=======================完善分割線====================================== **************************************************************************** 以下為個人經驗: 正如上文所說的,連線失敗的原因有很,但由於急於解決往往被一些“不明真相”的轉載搞得頭暈目眩,浪費了更多的時間, 我也一樣,看了很多試了很多,發現都不行。 連線本機可,就是遠端失敗,偶然的一次嘗試,連線同事電腦中的MYSQL,居然連上了, 仔細檢視原來同事跟我電腦中的MYSQL版本相同,而我要遠端連線的版本較新,找到原因就好解決了。 第一反應把libmySQL.dll、libmySQL.lib換成新版本,連線成功! ******************************************************************************