Qt 解决MySQL 中文乱码问题

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 的交互就可以正常显示中文了。

在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值