★【求帮助】linux下Qtcreator编程输出mysql数据库查询的结果时中文乱码

时间:2020-11-25 07:57:23
我用的是ubuntu,
先上图说明:
我是使用navicat图形界面管理mysql数据库的,数据库连接编码设置为UTF-8了:

★【求帮助】linux下Qtcreator编程输出mysql数据库查询的结果时中文乱码

数据库project也设置为UTF-8了
★【求帮助】linux下Qtcreator编程输出mysql数据库查询的结果时中文乱码

★【求帮助】linux下Qtcreator编程输出mysql数据库查询的结果时中文乱码

★【求帮助】linux下Qtcreator编程输出mysql数据库查询的结果时中文乱码

数据库project中的表student也设置为UTF-8了
★【求帮助】linux下Qtcreator编程输出mysql数据库查询的结果时中文乱码

表的内容
★【求帮助】linux下Qtcreator编程输出mysql数据库查询的结果时中文乱码

Qt creator的编码也设置为UTF-8了
★【求帮助】linux下Qtcreator编程输出mysql数据库查询的结果时中文乱码

但是输出从数据库中查询到的中文内容字符的时候还是乱码
★【求帮助】linux下Qtcreator编程输出mysql数据库查询的结果时中文乱码

本人Qt初学者,用了三天时间,网上查了很多资料,用了很多办法都不行啊,实在没办法,
只好发贴问,哪位大牛可以告诉我啊,万分感谢啊!


附源代码:

1、exp1.pro

QT +=core gui sql
#TARGET =
#DEPENDPATH += .
#INCLUDEPATH += .
SOURCES += \
    main.cpp


2、main.cpp

#include <QtCore/QCoreApplication>
#include <QtSql>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QString>

int main(int argc,char *argv[])
{


    QCoreApplication a(argc,argv);

    QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForLocale(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForTr(codec);

    QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("project");
    db.setUserName("root");
    db.setPassword("0");


    if(db.open())
    {
        qDebug()<<"database is established!";
    }
    else
    {
        qDebug()<<"build error!";
        return a.exec();
    }
    QSqlQuery query;
    query.exec(QObject::tr("select * from student"));
    QSqlRecord rec=query.record();
    int count=rec.count();
    qDebug()<<"Number of column:"<<count;

    while(query.next())
    {
        rec=query.record();
        int name=rec.indexOf("name");
        int card=rec.indexOf("card");
        int user=rec.indexOf("user");
        int password=rec.indexOf("password");
        int book =rec.indexOf("book");
        QString value1 =query.value(name).toString();
        QString value2 =query.value(card).toString();
        QString value3 =query.value(user).toString();
        QString value4 =query.value(password).toString();
        QString value5 =query.value(book).toString();
        qDebug()<<"name:"<<value1<<"\t"<<"card:"<<value2<<"\t"<<"user:"<<value3
                   <<"\t"<<"password:"<<value4<<"\t"<<"book:"<<"\t"<<value5;

    }
    query.clear();
    db.close();
    return a.exec();
}

4 个解决方案

#2


Qt 我操作多的是Oracle数据库  我习惯是读取中文字符添上
    QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));//UTF-8 GBK
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));

#3


引用 2 楼  的回复:
Qt 我操作多的是Oracle数据库  我习惯是读取中文字符添上C/C++ code
    QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));//UTF-8 GBK
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
    QTextCod……


我试过用GBK,但也不行。GB2312也用过,也不行,我觉得可能是别的原因。在navicat上设置好编码后都能显示出中文来,但是经过Qt查询输入就不对了,其中肯定是有某个原因,但是我不知道是哪里有问题。

话说,关于Qt的版块很冷清啊,都没几个人好像。

#4


我已经解决了,多谢楼上各位!
解决办法看这里,希望对其他遇到这个问题的人有帮助。
http://blog.csdn.net/stormwy/article/details/7853464

#1


#2


Qt 我操作多的是Oracle数据库  我习惯是读取中文字符添上
    QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));//UTF-8 GBK
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));

#3


引用 2 楼  的回复:
Qt 我操作多的是Oracle数据库  我习惯是读取中文字符添上C/C++ code
    QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));//UTF-8 GBK
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
    QTextCod……


我试过用GBK,但也不行。GB2312也用过,也不行,我觉得可能是别的原因。在navicat上设置好编码后都能显示出中文来,但是经过Qt查询输入就不对了,其中肯定是有某个原因,但是我不知道是哪里有问题。

话说,关于Qt的版块很冷清啊,都没几个人好像。

#4


我已经解决了,多谢楼上各位!
解决办法看这里,希望对其他遇到这个问题的人有帮助。
http://blog.csdn.net/stormwy/article/details/7853464