查看完整版本: [-- Qt5中文无法查询 --]

QTCN开发网 -> Qt中文处理 -> Qt5中文无法查询 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

流水枯藤 2019-12-10 08:58

Qt5中文无法查询

Qt5连接MySQL数据库时用中文查询数据库不显示数据
数据库中有三个表,我用了三个.cpp文件,其中一个用中文查询能显示结果,其他两个只能用英文查询得到结果
三个.cpp文件中的代码除了数据表名其他都相同
数据库编码为utf8,Qt默认编码设置为utf8,utf8 BOM设置为如果编码为utf8则添加,Qt中没有用代码设置编码
.cpp文件中使用QStringLiteral设置表头
QSqlQueryModel *model = new QSqlQueryModel;
QString str= QString("select * from composite where material_name like '%%1%').arg(); model->setQuery(str);
    model->setHeaderData(0,Qt::Horizontal,QStringLiteral("序号"));

XChinux 2019-12-10 09:30
数据库连接后,执行一下下列语句:
SET NAMES 'utf8'

流水枯藤 2019-12-10 09:45
XChinux:数据库连接后,执行一下下列语句:
SET NAMES 'utf8' (2019-12-10 09:30) 

没有效果
    if(!db.open())
    {
        QMessageBox::warning(this,"错误",db.lastError().text());
        return;
    }
    db.exec("set names 'utf8'");

流水枯藤 2019-12-10 09:46
数据库连接后会显示
QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.
更换数据表显示
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.

XChinux 2019-12-10 17:49
同一个数据库同一个线程只连接一次就行了,你上面的报错提示重复创建这个连接了。
创建连接后,先执行下上面我写的查询看看。

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setUsername(...);
db.setDatabase(....);
.....
if (db.open())
{
      db.exec("SET NAMES 'utf8'");
}

流水枯藤 2019-12-10 22:05
XChinux:同一个数据库同一个线程只连接一次就行了,你上面的报错提示重复创建这个连接了。
创建连接后,先执行下上面我写的查询看看。
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setUsername(...);
....... (2019-12-10 17:49) 

还是不行啊,中文查询不显示数据,英文可以

流水枯藤 2019-12-10 22:13
中文查询时能显示表头
在查询语句后面添加qDebug不显示数据
在MySQL中使用同样查询语句会显示数据

XChinux 2019-12-11 08:23
SQL语句中不要加中文,先将查询结果中的中文正确显示了再说。

流水枯藤 2019-12-11 08:53
XChinux:SQL语句中不要加中文,先将查询结果中的中文正确显示了再说。 (2019-12-11 08:23) 

没有添加,代码中使用的是如题的模糊查询


查看完整版本: [-- Qt5中文无法查询 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled