Qt5.8.0 mingw 操作mysql5.6.24 插入中文亂碼解決方案

#qt5.8.0 mingw 操作mysql5.6.24 插入中文亂碼解決方案

////////////重要提示/////////////

下面說的可以實現效果,但是太麻煩了…
只需要在程序裏添加 一行代碼即可
QSqlDatabase db;
/在win下中文不亂碼
db.exec(“SET NAMES ‘GBK’”);
1.mysql數據庫爲免安裝版本

1.環境
系統:win10
系統
qt:qt5.8.0 mingw
qt
mysql:mysql5.6.24免安裝版本
mysql免安裝版本
2.描述
使用qt寫了個簡單的數據庫操作,在插入中文的時候發現是亂碼,亂碼的形式是這樣的:???。隨後就開始在網上找各種解決方案,然而並沒有解決。當然,在這個過程中也對mysql數據庫有了更深的認識。網上說的改這樣改那樣,都沒啥用。因爲本身你數據庫沒錯,錯的在於你插入的數據,也就是在qt插入代碼那裏。
3.問題解決方案
(1).首先排除mysql數據庫的問題,查看你數據庫的編碼格式,是不是都是utf8
數據庫編碼
我這邊數據庫的編碼格式utf8,但是插入還是不行,問題出在哪裏?這個我在找答案的時候好像沒找到,然後特別迷茫。後來我突然看到了數據表的建表語句。因爲我在建表的時候只對數據庫的字符集進行了設置,校對規則沒有設置,但是我看到的我表裏的建表sql的校對規則是utf8_bin
這裏寫圖片描述
我操作的目標數據庫下表的建表sql,如圖:
數據表建表sql
爲啥這裏是utf8_bin,我在建庫的時候沒有選擇,就默認位utf8_bin了,那會不會跟這個有關係呢?於是我就把之前以QString插入的內容改成了QByteArray。然後插入就正常了。如圖
插入中文圖
qt裏的代碼
進行轉換的代碼
插入代碼

4.解決過程中遇到的一些坑
1.在插入的時候,如果你在你QString字符串的後面進行toUtf8()的操作,你插入到mysql數據庫的中文會顯示正常,但是在提取到qt時,會顯示亂碼
2.很多博客寫的情況可能只是適合作者本人的環境,對於你的情況的匹配度不是很高。所以要多思考,多想爲什麼。

5.測試
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章