Russian Qt Forum

Qt => Базы данных => Тема начата: george от Май 09, 2011, 16:58



Название: кодировки. почему работает?
Отправлено: george от Май 09, 2011, 16:58
Есть база MySQL, повсюду стоят кодировки utf-8.
Код пишу в Qt Creator на Win7,
- в креаторе кодировка файлов по умолчанию windows-1251.
- в коде
Код:
    QTextCodec *codec = QTextCodec::codecForName("Windows-1251");
    QTextCodec::setCodecForCStrings(codec);

Запрос выполняется нормально, можно просмотреть результат
Код:
query.exec("SELECT Преподаватель FROM Schedule;");
while(query.next()) { //результат
                    QString t = query.value(0).toString();
                    qDebug()<<t<<'\n';            };

Каким образом база понимает запрос, если кодировка в базе utf-8, а запросы к ней выполняются из кода в windows-1251?




Название: Re: кодировки. почему работает?
Отправлено: blood_shadow от Май 09, 2011, 21:46
Каким образом база понимает запрос, если кодировка в базе utf-8, а запросы к ней выполняются из кода в windows-1251?
строка
Код:
QTextCodec::setCodecForCStrings(codec);
говорит что при конвертации с обычных строк в QString(в котором используется utf-16 насколько мне не
изменяет память) будет использоваться метод перекодирования с "Windows-1251" в utf-16, то есть
ты явно указал что текст у тебя в "Windows-1251" и поэтому перекодировка будет правильной,
query.exec принимает QString, то есть тут присутствует неявная конвертация с 1251 в юникод
это все есть в ассистанте в описании класса QString


Название: Re: кодировки. почему работает?
Отправлено: serg_hd от Май 10, 2011, 00:34
Поле таблицы на русском? Круть, пока такого не встречал...