前言
mysql驅動版本msvc2015x32版本調好, mysql的mingw32版本的驅動上一個版本編譯並測試好,有些三方庫最低支持vs2017,所以只能使用msvc2017x64,基於Qt5.9.3,於是本篇編譯mysql驅動的msvc2017x64版本,滿足當前的特定需求,這次過程有點費勁,可能是Qt的版本低於Qt5.12,繼續無保留分享出來。
本篇主要描述Qt5.9.3 msvc2017x64 + mysql8.0.16的驅動編譯過程。
安裝得時候記得要勾選上源碼
其他過程略。
下載數據庫運行包文件。(注意:這裏要注意跟目標機器安裝的版本要一致)。
下載地址:https://dev.mysql.com/downloads/connector/cpp
(這裏查看“入坑一”)
直接越過了下載了,因爲下載下來的目前編譯都有問題
數據庫安裝在本地,直接通過本地了:
使用QtCreator打開
這裏要去掉shadow,否則會其他錯誤,參考“入坑一”和“入坑二”:
(這裏要是報錯就回過去看步驟三以及入坑一二)
將mysql的lib下的libmysql.dll拷貝到qt的msvc2017x64的bin目錄下,而且打包軟件的時候也要帶上。
這裏是直接將之前lib對應的libmysql.dll拷貝進qt的bin和應用部署文件夾下:
(PS:打包發佈時windeployqt不會主動拷貝,是需要手動複製過去)
將應用從odbc切入mysql驅動編譯數據庫的工程:
這裏是因爲mysql8修改了加密方式,直接使用mysql驅動的話要修改加密方式,修改方式主要是部署數據庫的時候修改,可以登錄數據庫然後做如下操作:
然後應用登錄測試
若還需要遠程登錄,則繼續步驟八和九:
這是因爲賬號不被允許遠程登錄,所以需要修改數據庫用戶的配置,讓其允許遠程登錄。
修改用戶被允許遠程登錄,先使用mysql控制端輸入密碼登錄,然後操
作:
use mysql;
select host,host from user;
update user set host = ‘%’ where user = ‘root’;
select host,host from user;
這時候,還是不行,需要強行刷新以下
flush privileges;
然後成功:
至此,Qt5.9.3 msvc2017x64 + mysql8.0.16數據庫連接驅動編譯完成。
使用遠程工具測試,發現出錯:
這是因爲8.0之後mysql更改了密碼的加密規則,目前的客戶端連接軟件還不支持Mysql8新增加的加密方式caching_sha2_password,所以需要修改用戶的加密方式,將其改回舊加密驗證方式。
先登錄mysql命令行,執行以下,主要是youPassword要替換爲你使用遠程登錄的賬戶密碼:
alter user 'root'@'%' identified by 'youPassword' password expire never;
alter user root identified with mysql_native_password by 'youPassword';
flush privileges;
編譯錯誤,無法通過
多方查找,定位在提供的庫的版本上,也不行。
本次版本,最後嘗試直接從mysql安裝文件夾裏面拿,可以通過,但是也沒有看到根錄下文件(後來檢查路徑才確認未生成到根目錄下)。
以下截圖過程可參考:
然後去掉shadow,成功了:
去掉shaodw,路徑查看“入坑二”。
按照之前mingw32編譯的沒找到輸出
有些配置文件,所以直接全部構建,來看生成的文件夾
發現是路徑問題。
找到到對應的路徑,生成了。
綜合一和二,還有嘗試下載驅動庫的編譯器vc版本問題,這裏解決差不多花了大半天了去嘗試、摸索然後逐步排除各種問題。