Перейти к содержанию

Работа с базой данных MySQL


Гость

Рекомендуемые сообщения

ASP Linux 9, MySQL, QT 3.2, Компилятор g++

Ситуация :

Есть база на MySQL кодовая таблица CP1251.

Немогу заставить отображаться в таблице DataTable корректно

русские буквы.

Если добавить запись на русском из MySQL в коммандном режиме

то при просмотре select * from table1 запись отображается по Русски. При запуске приложения под X Window в таблице DataTable запись на русском отображается в другой кодировке (типа êúûăČĖÀ).

При добавлении записи из X Window приложения в таблице появляется запись ??????? и при просмотре в команндном режиме MySQL выглядит также ??????.

Подскажите пожалуйста как правильно работать с базой данных в Русской кодировке ?

Ссылка на комментарий
Поделиться на другие сайты

Попробуй QString::fromLocal8Bit("тест");

Как в MySQL не знаю, но в PostgreSQL есть команда recode, которая транслирует запрашиваемые строки в нужную кодировку, - возможно в MySql также есть что-либо подобное.

Еще как вариант могу предложить перекодировать строки на лету(если база не дает) в нужную кодировку, - в Qt есть возможность получить доступ к строкам перед записью и перед отображением.

Успехов

Ссылка на комментарий
Поделиться на другие сайты

Мне кажеться дело даже не в MySQL.

Написал простейшую программа на QT.

Окно, в окне 2 элемента QLineEdit и QPushButton.

При нажатии на кнопку вывожу в терминал текст из

QLineEdit.

Стр.1. qDebug( QString::fromLocal8Bit( lineEdit1->text() ) );

Стр.2. qDebug( QString::fromAscii( lineEdit1->text() ) );

Стр.3. qDebug( QString::fromUtf8( lineEdit1->text() ) );

Стр.4. qDebug( "Текст" );

Так вот стр.1.-стр.3. выводят в терминал вместо русских букв "?",

стр.4. отрабатывает правильно.

Может быть кто нибудь подскажет как добиться нужного результата ?

(P.s. qDebug( QString::fromLocal8Bit("тест")); так же выводит знаки "?" вместо русских букв.)

Ссылка на комментарий
Поделиться на другие сайты

Надо так:

Стр.1. qDebug( lineEdit1->text().local8Bit() );

Стр.2. qDebug( lineEdit1->text().local8Bit() );

Стр.3. qDebug( lineEdit1->text().local8Bit() );

Стр.4. printf("Текст");

Но если у тебя и четвертая строка не видна, то у тебя локаль не настроена

Ссылка на комментарий
Поделиться на другие сайты

Большое спасобо, все заработало.

Но ты говорил, что есть возможность обрабатывать записи на лету перед отображением. Нельзя ли по подробнее. В частности есть вопрос по объекту QDataTable. Как заставить систему перекодировать записи перед отображением на экран, учитывая, что объект dataTable1 был создан с помощью QT Designer, а не вручную ? (Я это к чему, в QDataTeble есть событие

paintField(...) может быть его нужно как то использовать, но у меня с первого захода не получилось.)

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...