Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
20 / 15 / 7
Регистрация: 03.10.2014
Сообщений: 94
1

Qt 5.8 кракозябры при отображении таблицы MySQL в QTableview

08.05.2017, 13:55. Показов 3803. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, уважаемые.
Есть СУБД MariaDB с базой в кодировке UTF-8. Пытаюсь вывести таблицу из этой БД на QTableview.
Кириллица выводится "кракозябрами".
В линуксе, естественно, всё ОК.
Система:
Windows 10 x86_64.
Qt 5.8.
Qt Creator 4.2.1 minGW-32.
Куда копать, кого винить?)))
Заранее благодарю.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.05.2017, 13:55
Ответы с готовыми решениями:

DataGridView кракозябры при отображении русских символов
Всем привет, столкнулся с проблемой, что при загрузке текста на русском языке в dataGridView...

Загружаю файл Word, но при отображении файла у меня кракозябры
испльзую кодировку 1251. загружаю файл Word но при отображении файла у меня кракозябры. Как решить...

Замена названий таблиц в отображении QTableView
Всем добрый вечер! Вопрос следующий - можно ли заменить названия таблиц в QTableView на...

Ошибка при отображении таблицы
Разрабатывал сайт в другом месте, но когда пришел домой, появилась такая ошибка. По идеи под полями...

18
7 / 7 / 0
Регистрация: 15.11.2016
Сообщений: 36
08.05.2017, 14:03 2
Файлы проекта в какой кодировке? Обычно Windows переделывает кодировку.
Вот тут посмотри, решили такую же проблему - Неверная кодировка в форме. UnicodeUTF8' is not a member of 'QApplication'
1
20 / 15 / 7
Регистрация: 03.10.2014
Сообщений: 94
08.05.2017, 14:34  [ТС] 3
Все исходники в UTF-8.
(((
Дело в том, что с самим интерфейсом всё нормально. Русский язык отображается корректно, а вот вывод таблицы в "кракозябрах".
0
7 / 7 / 0
Регистрация: 15.11.2016
Сообщений: 36
08.05.2017, 14:42 4
Точно кодировка базы данных UTF-8? Проверь ещё раз.
Базу как выводишь?
1
20 / 15 / 7
Регистрация: 03.10.2014
Сообщений: 94
08.05.2017, 15:09  [ТС] 5
Как проверить кодировку базы? При установке MariaDB ставил галочку напротив "создавать БД в кодировке UTF-8 по-умолчанию".
Вывожу базу так:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mModel = new QSqlTableModel(this);
    ui->tableView->setModel(mModel);
    mModel->setTable("main");
    mModel->setEditStrategy(QSqlTableModel::OnFieldChange);
    mModel->select();
    mModel->setHeaderData(0, Qt::Horizontal, tr("ID"));
    mModel->setHeaderData(1, Qt::Horizontal, tr("Ф.И.О."));
    mModel->setHeaderData(2, Qt::Horizontal, tr("№ телефона"));
 
 
    ui->tableView->setColumnHidden(0, true);
    ui->tableView->setAlternatingRowColors(true);
    // Разрешаем выделение строк
    ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
    ui->tableView->resizeColumnsToContents();
Добавлено через 2 минуты
С этой виндой - одни грабли...
Как же хорошо и уютно в пингвине...
0
7 / 7 / 0
Регистрация: 15.11.2016
Сообщений: 36
08.05.2017, 15:11 6
Попробуй установить не галочкой, а прописать в client
[client]
default-character-set=utf8
Либо можно попробовать вручную преобразовать в utf-8
"ALTER DATABASE your_data_base_name charset=utf8;" (это для пустой базы данных, можно поискать как сделать для базы данных с данными)
PS: Не по теме конечно, но MariaDB - окончательная БД? Нет желания перейти на более стабильную ? Тот же postgres например
PSPS: Про бэкап не забудьте на всякий случай))
1
20 / 15 / 7
Регистрация: 03.10.2014
Сообщений: 94
08.05.2017, 15:29  [ТС] 7
Большое спасибо за ответы и советы.
Пример основан на тестовой базе MariaDB, основная база большая(((. Скорее всего, перекидывать её с Марии на Постгрес - не вариант.
Попробую ваши рекомендации и отпишусь.
Небольшая просьба - не исчезайте из этой темы))).

Добавлено через 11 минут
Выполнил все ваши рекомендации, рестартнул СУБД и ничего не поменялось...(((
0
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
08.05.2017, 15:31 8
А как вообще подключаешься? Разве есть поддержка этой MariaDB?
1
20 / 15 / 7
Регистрация: 03.10.2014
Сообщений: 94
08.05.2017, 15:48  [ТС] 9
Это форк MySQL. Скачал коннектор, закинул .dll в каталог с проектом и подключаюсь:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void MainWindow::on_pushButtonConnect_clicked()
{
    QString username = ui->lineEditUser->text();
    QString password = ui->lineEditPassword->text();
 
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setDatabaseName("testbase");
    db.setHostName("localhost");
    db.setUserName(username);
    db.setPassword(password);
 
    bool ok = db.open();
 
    if(ok)
    {
        QMessageBox::information(this, "Информация", "Соединение установлено.");
        ui->labelStatus->setText("Статус соединения: Ок.");
    }
    else
    {
        QMessageBox::critical(this, "Ошибка", "Не удалось подключиться к базе данных.");
        ui->labelStatus->setText("Статус соединения: Нет соединения.");
    }
}
Добавлено через 11 минут
Устанавливаю постгрес. Запрашивает локаль по-дефолту. Какую посоветуете (в винде), чтобы в будущем не было граблей?
0
7 / 7 / 0
Регистрация: 15.11.2016
Сообщений: 36
08.05.2017, 15:55 10
Да там всё стандартно, повесь на localhost. Если что, всегда можно изменить порты. После установки надо будет тебе собрать psql драйвера. Есть много мануалов, в соседней теме я тоже описывал
1
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
08.05.2017, 16:01 11
Цитата Сообщение от axe77 Посмотреть сообщение
Скачал коннектор, закинул .dll
Ну так может там не допилили что-то или надо какую-то команду дать при подключении, чтобы кодировка была правильная.
1
20 / 15 / 7
Регистрация: 03.10.2014
Сообщений: 94
08.05.2017, 16:09  [ТС] 12
Попробую "Чистый" MySQL поставить и протестировать.
Спасибо.
0
20 / 15 / 7
Регистрация: 03.10.2014
Сообщений: 94
12.05.2017, 20:05  [ТС] 13
UPDATE!!!!
А ларчик просто открывался!
Сделал запрос к базе перед тем, как помещать таблицу в QTableView.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlDatabase>
#include <QMessageBox>
#include <QSqlQuery>
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::on_pushButtonExit_clicked()
{
    this->close();
}
 
void MainWindow::on_pushButtonConnect_clicked()
{
    QString username = ui->lineEditUser->text();
    QString password = ui->lineEditPassword->text();
 
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setDatabaseName("cars");
    db.setHostName("localhost");
    db.setUserName(username);
    db.setPassword(password);
 
    bool ok = db.open();
 
    if(ok)
    {
        QSqlQuery query;
        query.exec("SET NAMES 'cp1251'");//ВОТ ОНА!!!! ЭТА СТРОКА!!!!
        QMessageBox::information(this, "Информация", "Соединение установлено.");
        ui->labelStatus->setText("Статус соединения: Ок.");
    }
    else
    {
        QMessageBox::critical(this, "Ошибка", "Не удалось подключиться к базе данных.");
        ui->labelStatus->setText("Статус соединения: Нет соединения.");
    }
}
 
void MainWindow::on_pushButtonEditDB_clicked()
{
    FormEditDB *objEdit = new FormEditDB(ui->labelUser->text(), ui->labelPassword->text());
    objEdit->setAttribute(Qt::WA_DeleteOnClose, true);
    objEdit->show();
}
Все спасибо за ответы и советы))).
2
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
12.05.2017, 21:03 14
Я об этом и говорил. Только не ясно, зачем ты используешь эту древнюю кодировку.
1
20 / 15 / 7
Регистрация: 03.10.2014
Сообщений: 94
13.05.2017, 03:13  [ТС] 15
Я её не использую.
БД в кодировке UTF-8.
0
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
13.05.2017, 09:01 16
Ну если указываешь 1251, то она где-то установлена.
0
19 / 19 / 4
Регистрация: 27.05.2013
Сообщений: 119
17.05.2017, 10:11 17
У меня схожая проблема, стандартный mysql, в 5.8 после запроса получаю данные в кракозябре, в 5.7 проблем нет.
База была в ср1257, сейчас изменял на utf8mb4 default и utf16 default ввключая таблицы, эффекта положительного не дает.
Дело наверно не в этом.

Будут еще советы куда смотреть что делать?

Что делает SET в примере выше?
0
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
17.05.2017, 15:39 18
SET NAME не задаёт кодировку базы данных, а определяет в какой кодировке будет вестись обмен между программой и СУБД. И здесь не понятно, почему это помогло автору.
0
19 / 19 / 4
Регистрация: 27.05.2013
Сообщений: 119
18.05.2017, 10:18 19
Цитата Сообщение от nmcf Посмотреть сообщение
SET NAME не задаёт кодировку базы данных, а определяет в какой кодировке будет вестись обмен между программой и СУБД. И здесь не понятно, почему это помогло автору.
короче, это помогает. Не известно как, когда в моем случае уже все в utf16 default.
Именно SET NAMES 'cp1251'
0
18.05.2017, 10:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2017, 10:18
Помогаю со студенческими работами здесь

Кракозябры при выводе в Mysql в UTF-8
Создал базу данных с utf8_general_ci и таблицы тоже utf8_general_ci но на сайте когда изменяю...

Проблема при отображении и печати таблицы
Всем доброго дня, друзья. В определенный момент работы с очередным файлом, созданным на основы...

Кракозябры при добавлении в материал картинки/таблицы и т.д
ДОбрый день! Установил джумлу с русским языком. Все работает прекрасно. Но обнаружил, если при...

phpMyAdmin неправильная кодировка при отображении данный из таблицы на странице браузера
Здравствуйте друзья, востановил базу на другой комп открыл браюзер, смотрю кодировка такая (рис.)....

Как добиться постоянной (фиксированной) ширины столбцов при отображении содержимого таблицы?
Как добиться постоянной (фиксированной) ширины столбцов при отображении содержимого таблицы? Я...

кракозябры в mysql
собстно есть форма,позволяющая создавать записи в mysql.обработчик формы сохранён в win-1251, в бд...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru