Russian Qt Forum
Сентябрь 30, 2024, 08:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: MySQL и cp1251 - помогите настроить русский язык  (Прочитано 6562 раз)
neosapient
Гость
« : Июнь 15, 2010, 12:38 »

Здравствуйте.

Пользовался поиском - подобных вопросов нашел много, но не ответа не нашел.

Есть БД со следующими настройками:
Цитировать
character_set_client = cp1251
character_set_connection = cp1251
character_set_database = utf8
character_set_filesystem = binary
character_set_results = cp1251
character_set_server = utf8
character_set_system = utf8

Следующий код выводит вместо русских букв знаки вопроса "? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?", Как это и исправить ?
Код:
#include <QtGui>
#include <QtSql>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("Windows-1251"));

    QSqlDatabase my_db = QSqlDatabase::addDatabase("QMYSQL", "mysql_db");
    my_db.setHostName("192.168.1.2");
    my_db.setDatabaseName("report");
    my_db.setUserName("1C");
    my_db.setPassword("1C");
    my_db.open();
    my_db.exec("SET NAMES cp1251");
    QSqlQuery query(my_db);
    query.exec("SELECT name,login FROM tbl_users");
    while (query.next()) {
        QString name = query.value(0).toString();
        qDebug() << name;
        char localbuf[256]={0};
        sprintf(localbuf,"%s",name.toAscii().data());
    }
}
« Последнее редактирование: Июнь 15, 2010, 12:41 от neosapient » Записан
crossly
Гость
« Ответ #1 : Июнь 15, 2010, 12:43 »

зачем тебе cp1251??.... храни в utf-8
Записан
neosapient
Гость
« Ответ #2 : Июнь 15, 2010, 12:49 »

Цитировать
зачем тебе cp1251??.... храни в utf-8
БД - офисная и существеут в данном состоянии уже год.
Изменить её настройки - не имею права.

Как мне правильно считать русские буквы из БД ?
Записан
crossly
Гость
« Ответ #3 : Июнь 15, 2010, 12:54 »

епть.... так у вас и так хранится все в utf-8... смотри внимательно конфиг
Записан
neosapient
Гость
« Ответ #4 : Июнь 15, 2010, 13:10 »

С MySQL полноценно работать не приходилось.

Что следует изменить в коде примера (из первого поста), чтобы правильно считывались данные ?
« Последнее редактирование: Июнь 15, 2010, 13:24 от neosapient » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Июнь 15, 2010, 13:47 »

>>Что следует изменить в коде
изменить строку:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
на:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

убрать строку:
my_db.exec("SET NAMES cp1251");
Записан

Юра.
neosapient
Гость
« Ответ #6 : Июнь 15, 2010, 14:29 »

Понял. Получилось.  Улыбающийся

Код:

#include <QtGui>
#include <QtSql>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("Windows-1251"));

    QSqlDatabase my_db = QSqlDatabase::addDatabase("QMYSQL", "mysql_db");
    my_db.setHostName("192.168.1.2");
    my_db.setDatabaseName("report");
    my_db.setUserName("1C");
    my_db.setPassword("1C");
    my_db.open();
    QSqlQuery query(my_db);
    query.exec("SELECT name,login FROM tbl_users");
    while (query.next()) {
        QString name = query.value(0).toString();
        qDebug() << name;
        char localbuf[256]={0};
        sprintf(localbuf,"%s",name.toLocal8Bit().data());
    }
}
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Июнь 15, 2010, 16:47 »

>>QTextCodec::setCodecForLocale(QTextCodec::codecForName("Windows-1251"));
а для чего ты кодек локали устанавливаешь? у тебя локаль системы отличается от Windows-1251?
Записан

Юра.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.117 секунд. Запросов: 22.