Qt+MySql開發(fā)筆記:Qt5.9.3的mingw32版本編譯MySql8版本驅(qū)動(dòng)并Demo連接數(shù)據(jù)庫(kù)測(cè)試
前言
??之前特定的mysql版本msvc版本已經(jīng)調(diào)通了,但是為了更好的跨平臺(tái),所以選擇用mingw32版本,于是需要編譯mysql驅(qū)動(dòng)的mingw32版本的驅(qū)動(dòng)庫(kù),以便提供給qt連接mysql使用。
編譯環(huán)境
Qt5.9.3 mingw32
??安裝得時(shí)候記得要勾選上源碼
mysql-installer-community-8.0.16.0
??

下載數(shù)據(jù)庫(kù)
??https://downloads.mysql.com/archives/community/
??

編譯mysql驅(qū)動(dòng)庫(kù)(Qt5.9.3+mysql8.0.16)
步驟一:安裝Qt5.9.3勾選mingw32版本。
??

??其他過(guò)程略。
步驟二:下載數(shù)據(jù)庫(kù)32位驅(qū)動(dòng)運(yùn)行程序并解壓
??下載數(shù)據(jù)庫(kù)運(yùn)行包文件。(注意:這里要注意跟目標(biāo)機(jī)器安裝的版本要一致)。
??下載地址:https://downloads.mysql.com/archives/c-c
??

??

步驟三:打開qt中自帶的mysql源碼工程
??

??使用QtCreator打開:
??

??注意工程的編譯套件。(注意:shadow build在這里不管作用,最后是生成到根目錄上去了,跟pro包含的pri配置有關(guān))
???

??

??

步驟四:qmake并且build構(gòu)建
??構(gòu)建成功:
??

??這里生成到磁盤根目錄下去了:
??

??

步驟五:替換插件的mysql庫(kù)
??

步驟六:將數(shù)據(jù)庫(kù)的libmysql.dll拷貝到bin目錄
??這個(gè)文件是運(yùn)行庫(kù),也是需要自動(dòng)手動(dòng)額外copy和打包時(shí)額外拷貝的,具體看 “入坑一”。
??需要將下載下來(lái)mysql的lib下的libmysql.dll拷貝到qt的gcc的bin目錄下,而且打包軟件的時(shí)候也要帶上。
??

??如果是打包,則windeployqt不會(huì)主動(dòng)拷貝,也需要手動(dòng)復(fù)制過(guò)去:
??

步驟七:編譯應(yīng)用連接測(cè)試
??編譯數(shù)據(jù)庫(kù)的工程:
??

??Ok了,提示不再是缺少驅(qū)動(dòng)了。
??下面配置好數(shù)據(jù)庫(kù),再嘗試:
??

步驟八:配置數(shù)據(jù)庫(kù)賬號(hào)允許遠(yuǎn)程操作
??這是因?yàn)橘~號(hào)不被允許遠(yuǎn)程登錄,所以需要修改數(shù)據(jù)庫(kù)用戶的配置,讓其允許遠(yuǎn)程登錄。
??修改用戶被允許遠(yuǎn)程登錄,先使用mysql控制端輸入密碼登錄,然后操作:
use mysql;select host,host from user;update user set host = ‘%’ where user = ‘root’;select host,host from user;
??這時(shí)候,還是不行,需要強(qiáng)行刷新以下
flush privileges;
??

??

??然后成功:
??
??至此,Qt5.9.3 mingw32 + mysql8.0.16數(shù)據(jù)庫(kù)完成。
步驟九:數(shù)據(jù)庫(kù)的遠(yuǎn)程操作工具連接
??使用遠(yuǎn)程工具測(cè)試,發(fā)現(xiàn)出錯(cuò):
??

??這是因?yàn)?.0之后mysql更改了密碼的加密規(guī)則,目前的客戶端連接軟件還不支持Mysql8新增加的加密方式caching_sha2_password,所以需要修改用戶的加密方式,將其改回舊加密驗(yàn)證方式。
??先登錄mysql命令行,執(zhí)行以下,主要是youPassword要替換為你使用遠(yuǎn)程登錄的賬戶密碼:
alter user 'root'@'%' identified by 'youPassword' password expire never;alter user root identified with mysql_native_password by 'youPassword';flush privileges;
???
??
入坑
入坑一:開始連通后打包后不行了,回頭也不行了
問(wèn)題
??開始連通后打包后不行了,回頭也不行了
原因
??需要使用到libmysql.dll運(yùn)行庫(kù)
解決
??需要將下載下來(lái)mysql的lib下的libmysql.dll拷貝到qt的gcc的bin目錄下,而且打包軟件的時(shí)候也要帶上。
??
??如果是打包,則windeployqt不會(huì)主動(dòng)拷貝,也需要手動(dòng)復(fù)制過(guò)去:
??