文章目录
Qt 解决MySQL 中文乱码问题
折腾了一天,整整一天,终于把该问题解决了。现在整理如下:
Qt 连接MySQL后,可能会遇到与MySQL交互过程中出现中文乱码的问题。
解决此问题的必要前提就是:
1、版本要匹配。
2、数据库连接正常。
3、数据库的编码格式与Qt的编码统一、
1、版本要匹配。
Qt for windows 的版本,一般都是32 位
下载的MySQL版本也必须是32位版本。
Qt 的编译器选择也需要是32 位的 。如:
2、数据库连接正常,需要重新编译Qt 自带的源程序中的mysql.pro 工程项目:
下载https://downloads.mysql.com/archives/c-c/下载MySQL Connector C 6.1, 因为笔者的使用的是MySQL5.5.15 版本的,这里需要MySQL Connector C 6.1
修改mysql.pro 文件如下:
TARGET = qsqlmysql
HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp
#QMAKE_USE += mysql
OTHER_FILES += mysql.json
PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
LIBS += "C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\lib\libmysql.lib"
INCLUDEPATH +="C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\include"
构建, 然后在c:\plugins\目录下会产生如下的文件:
将qsqlmysql.dll 复制到 Qt 的安装目录下mingw73_32\plugins\sqldrivers 如下
编写测试用例:
#include <QApplication>
#include <QMessageBox>
#include <QSqlError>
#include <QTextCodec>
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlQuery>
bool creatConnect();
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//QTextCodec *codec = QTextCodec::codecForName("UTF-8");
//QTextCodec::setCodecForLocale(codec);
if(!creatConnect())
{
// return 1;
}
qDebug() << "Available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug() << "\t "<< driver;
qDebug() << "End";
QSqlQuery query;
QString sql = "select * from test1;";
qDebug() << sql;
query.exec(sql);
while(query.next())
{
qDebug()<<query.value(0).toString()<<query.value(1).toString();
}
return a.exec();
}
bool creatConnect()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setPort(3307);
db.setDatabaseName("test");
db.setUserName("root");
db.setPassword("123456");
bool ok = db.open();//建立数据库连接
if(!ok)
{
QMessageBox::critical(0,QObject::tr("连接数据库失败!!!"),db.lastError().text());
return false;
}
else
{
QMessageBox::information(0,QObject::tr("Tips"),QObject::tr("连接数据库成功!!!"));
return true;
}
}
注意,数据库的名称、端口号、登录名和密码都要正确。
ok, 这样就可以连接上数据库了。
3、数据库的编码格式与Qt的编码统一、
通过SHOW VARIABLES LIKE ‘character%’;命令查看数据库的编码格式:
请确认是否为utf-8 格式。
Qt的编码格式:
ok, 此时Qt与MySQL 的交互就可以正常显示中文了。