VC遠端連線MYSQL失敗原因收集:mysql_real_connect()
阿新 • • 發佈:2019-02-18
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)
最初,我以為將"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
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換成新版本,連線成功! ******************************************************************************