Ситуация следующая:
Первые три записи добавлены в ТБД непосредственно из shell MySQL после команды SET NAMES utf8.
Последняя добавлена из программы написанной на Qt с переданным вБД параметром SET NAMES utf8.
При установке SET NAMES utf8 в shell MySQL первые три записи
отображаются правильно, последняя отображается нечитабельными
символами (кодировку менял на все которые только поддерживает MySQL).
При просмотре ТБД из программы написанной на Qt ни одна запись не
отображается правильно. В заголовке окна выведен текст для того чтобы быть уверенным, что локаль установлена в ср1251.
Все вышеописанное запускается под управлением WindowsXP.
#include "vwdb.h"
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QTextStream>
#include <QTranslator>
ViewDB::ViewDB(QWidget *parent): QWidget(parent)
{
setupUi(this);
connectionDB();
model = new QSqlTableModel(this);
model->setTable("TestTable");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
model->setHeaderData(0, Qt::Horizontal, tr("Идентификатор"));
model->setHeaderData(1, Qt::Horizontal, tr("Статус"));
tvwView->setModel(model);
}
void ViewDB::connectionDB()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("TestDB");
db.setUserName("root");
db.setPassword("rootpass");
db.open();
QSqlQuery query;
query.exec("SET NAMES utf8");
query.exec("SELECT* FROM TestTable");
query.next();
codec=QTextCodec::codecForName("utf8");
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
query.prepare("INSERT INTO TestTable (id, status) "
"VALUES (:id, :status)");
query.bindValue(":id", 40);
query.bindValue(":status", "Гость");
query.exec();
setWindowTitle("Текст в ср1251");
}