QT ODBC连接数据库读取中文乱码的一个解决方法

近日使用qt做一个程序,使用ODBC连接sql server数据库,在向数据库插入中文数据时一切正常,在数据库里中文显示正常
query.exec(QString(“insert into Name(Num,Name) values(’%1’,’%2’)”).arg(1).arg(ui->lineEdit_Name->text()));
然后再使用str = query.value(1).toString();读取出来显示的时候始终是乱码,不管输入什么文字始终显示 “锟斤拷” ,百度上查找了得出的结论是GBK字符集和Unicode字符集之间的转换问题,然后在程序里试了各种字符转换的方式,全都没用效果,几乎翻遍了百度关于数据库乱码问题的文章,终于找到一篇说是要将QODBCDriverPrivate类的变量unicode值为true,并重新编译替换之前的库,于是在\Qt\Qt5.6.3\5.6.3\Src\qtbase\src\sql\drivers\odbc文件夹下打开qsql_odbc.cpp找到QODBCDriverPrivate类一看,果然unicode(false)默认是false,将其改为true,然后保存,进入到\Qt\Qt5.6.3\5.6.3\Src\qtbase\src\plugins\sqldrivers\odbc,shift+右键,点击“在此处打开命令窗口”,然后执行:qmake odbc.pro;完毕后在执行:mingw32-make;第一次没有成功,提示mingw32-make不是内部或外部命令,然后又将Qt\Qt5.6.3\Tools\mingw492_32\bin这个路径添加到环境变量PATH里,再次执行mingw32-make,终于成功,生成的库文件在\Qt\Qt5.6.3\5.6.3\Src\qtbase\plugins\sqldrivers里,qsqlodbc.dll 和 qsqlodbcd.dll,将这两个文件覆盖到\Qt\Qt5.6.3\5.6.3\mingw49_32\plugins\sqldrivers里,然后重新编译应用程序,感人的中文终于正常显示了,本人qt初学者,一个小小的问题折腾了两天,现在把编译好的qsqlodbc.dll 和 qsqlodbcd.dll两个文件上传上来,有需要的朋友可以直接下载替换原来的文件即可。
ODBC驱动(https://download.csdn.net/download/boian/10737512)

你可能感兴趣的:(QT ODBC连接数据库读取中文乱码的一个解决方法)