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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Qt + PostgreSQL + UTF-8  (Прочитано 16452 раз)
Disaron
Гость
« : Июль 16, 2009, 09:08 »

При записи в БД на постгре из клиентского приложения кириллического текста - туда пишутся юникодовские кракозябры, хотя занесенное через запрос в анализаторе запросов отображается нормально. Кто-нить подскажет как устранить? - по форуму не нашел (или слепой :/ ).
БД на UTF-8.
ЗЫ: в qDebug() выводится нормально этот же текст.
« Последнее редактирование: Июль 16, 2009, 09:10 от Disaron » Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #1 : Июль 16, 2009, 09:55 »

Современные базы данных требуют, что бы клиент сообщил на какой кодировке он общаеться с базой данных. В Mysql это типа "SET NAMES utf-8", в посгрессе типа set encoging utf-8. Вы так делаете?
Записан
Disaron
Гость
« Ответ #2 : Июль 16, 2009, 10:18 »

Пробовал query.exec("SET CLIENT_ENCODING TO 'UTF8'") и ... TO 'WIN1251'")
во втором случае введенные данные отображаются и вводятся нормально, НО теперь квадраты на уже существующих данных. Использую под виндой драйвер ODBC PostgreSQL Unicode. Под линуксом пока не тестировал - там PQSQL.
Может в одбц-драйвере косяк. Я уже голову поломал.
ЗЫ: все с QTextCodec тоже перепробовал. Хотя конечно может и не все, но из того что нашел.
« Последнее редактирование: Июль 16, 2009, 10:21 от Disaron » Записан
BaltikS
Гость
« Ответ #3 : Июль 16, 2009, 10:44 »

На куя использовать ODBC? Через ODBC скорость работы ниже... Напрямую (через драйвер QPSQL) всё пашет без косяков в кодировке...
Записан
Disaron
Гость
« Ответ #4 : Июль 16, 2009, 11:10 »

Это было как временное решение - чтобы не трахаться со сборкой QPSQL для венды.
Записан
BaltikS
Гость
« Ответ #5 : Июль 16, 2009, 11:30 »

Disaron, скажу по секрету, это получилось бы гораздо быстрее, чем ты трахаешься с ODBC. Там в комплекте с PostgreSQL идёт SDK. Указываешь Qt на эти пути, даёшь две волшебные команды и всё.... qsqlpsql.dll  собран! Если есть вопросы по сборке - это отдельная тема для разговора.
А с ODBC неудобен, хотя бы тем, что нужны дрова postgres под ODBC. => сложности с установкой, настройкой и куча ещё всяких прелестей Улыбающийся
Записан
Disaron
Гость
« Ответ #6 : Июль 16, 2009, 11:39 »

Буду премного благодарен за эти 2 команды. Улыбающийся
Записан
BaltikS
Гость
« Ответ #7 : Июль 16, 2009, 11:43 »

qmake
make
ТОлько не забудь прописать пути к Lib и H Postgres, да и про Libpq тоже не забывай, что она должна быть видна системой
Записан
Disaron
Гость
« Ответ #8 : Июль 16, 2009, 11:55 »

Я наверно чего-то не понимаю: делаю все по топикам, но получаю только .a файл на выходе, а dll`ками не пахнет.
Записан
BaltikS
Гость
« Ответ #9 : Июль 16, 2009, 11:58 »

Точнее напишу так, всё равно будут вопросы:)... Как делаю я...
1) Ставлю PostgreSQL из сетапа (мне хватает версии 8.1.15)
2) Создаю(или добавляю) переменные окружения include, lib и PATH
3) Прописываю в них пути для PostgreSQL. Обычно это путь дл include - C:\Program Files\PostgreSQL\8.1\include, для lib - C:\Program Files\PostgreSQL\8.1\lib. Если работаем в MS Visual Studio, то путь для lib немного иной C:\Program Files\PostgreSQL\8.1\lib
4) В переменнную PATH прописываю (дописываю) C:\Program Files\PostgreSQL\8.1\bin
5) Захожу в каталог QTDIR\src\plugins\sqldrivers\psql
6) В командной строке даю следующие команды: qmake, make. Если работаете в MS Visual Studio команда - nmake
7) Наблюдаем за компиляцией и в случае успеха проверяем наличие драйвера (файл qsqlpsq.dll) по пути QTDIR\plugins\sqldrivers.
Крутой Проверяем наличие драйвера QPSQL и соединения в программе QTDIR\demos\sqlbrowser\release\sqlbrowser.exe

ПРИМЕЧАНИЕ: Всё написанное выше действительно при:
- наличие переменных окружения QTDIR, QMAKESPEC;
- наличиие в переменной окружения PATH пути %QTDIR/bin%;
- если сборка QT не статическая (без флага -static)
   Компиляция драйвера QT для других СУБД аналогично описанному выше способу, отличием будет лишь наличие других SDK Субд и клиентского драйвера (В нашем случае libpq.dll).

Удачи!
« Последнее редактирование: Июль 16, 2009, 12:01 от BaltikS » Записан
BaltikS
Гость
« Ответ #10 : Июль 16, 2009, 12:00 »

Я наверно чего-то не понимаю: делаю все по топикам, но получаю только .a файл на выходе, а dll`ками не пахнет.
проверь пункт 4 и 5.
Записан
Disaron
Гость
« Ответ #11 : Июль 16, 2009, 12:03 »

Я нашел свою ошибку - не надо было CONFIG+=STATIC вписывать Улыбающийся СПАСИБО!
Записан
BaltikS
Гость
« Ответ #12 : Июль 16, 2009, 12:06 »

При выполнении все пунктов можно и со static. Только заново Qt собирать надо. В этом случае дравер у тебя будет включен в исполняемый файл. И не забывай, что за собой всегда надо таскать libpq.dll.
Записан
Disaron
Гость
« Ответ #13 : Июль 16, 2009, 12:10 »

BaltikS, огромный тебе решпект! Все заработало и проблема была в ODBC. C родным драйвером все прекрасно.
Записан
BaltikS
Гость
« Ответ #14 : Июль 16, 2009, 12:20 »

Да нзчто...всегда рад помочь Подмигивающий........если конечно знаю чем... Улыбающийся
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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