Название: Qt + PostgreSQL + UTF-8 Отправлено: Disaron от Июль 16, 2009, 09:08 При записи в БД на постгре из клиентского приложения кириллического текста - туда пишутся юникодовские кракозябры, хотя занесенное через запрос в анализаторе запросов отображается нормально. Кто-нить подскажет как устранить? - по форуму не нашел (или слепой :/ ).
БД на UTF-8. ЗЫ: в qDebug() выводится нормально этот же текст. Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: Admin от Июль 16, 2009, 09:55 Современные базы данных требуют, что бы клиент сообщил на какой кодировке он общаеться с базой данных. В Mysql это типа "SET NAMES utf-8", в посгрессе типа set encoging utf-8. Вы так делаете?
Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: Disaron от Июль 16, 2009, 10:18 Пробовал query.exec("SET CLIENT_ENCODING TO 'UTF8'") и ... TO 'WIN1251'")
во втором случае введенные данные отображаются и вводятся нормально, НО теперь квадраты на уже существующих данных. Использую под виндой драйвер ODBC PostgreSQL Unicode. Под линуксом пока не тестировал - там PQSQL. Может в одбц-драйвере косяк. Я уже голову поломал. ЗЫ: все с QTextCodec тоже перепробовал. Хотя конечно может и не все, но из того что нашел. Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: BaltikS от Июль 16, 2009, 10:44 На куя использовать ODBC? Через ODBC скорость работы ниже... Напрямую (через драйвер QPSQL) всё пашет без косяков в кодировке...
Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: Disaron от Июль 16, 2009, 11:10 Это было как временное решение - чтобы не трахаться со сборкой QPSQL для венды.
Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: BaltikS от Июль 16, 2009, 11:30 Disaron, скажу по секрету, это получилось бы гораздо быстрее, чем ты трахаешься с ODBC. Там в комплекте с PostgreSQL идёт SDK. Указываешь Qt на эти пути, даёшь две волшебные команды и всё.... qsqlpsql.dll собран! Если есть вопросы по сборке - это отдельная тема для разговора.
А с ODBC неудобен, хотя бы тем, что нужны дрова postgres под ODBC. => сложности с установкой, настройкой и куча ещё всяких прелестей :) Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: Disaron от Июль 16, 2009, 11:39 Буду премного благодарен за эти 2 команды. :)
Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: BaltikS от Июль 16, 2009, 11:43 qmake
make ТОлько не забудь прописать пути к Lib и H Postgres, да и про Libpq тоже не забывай, что она должна быть видна системой Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: Disaron от Июль 16, 2009, 11:55 Я наверно чего-то не понимаю: делаю все по топикам, но получаю только .a файл на выходе, а dll`ками не пахнет.
Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: BaltikS от Июль 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. 8) Проверяем наличие драйвера QPSQL и соединения в программе QTDIR\demos\sqlbrowser\release\sqlbrowser.exe ПРИМЕЧАНИЕ: Всё написанное выше действительно при: - наличие переменных окружения QTDIR, QMAKESPEC; - наличиие в переменной окружения PATH пути %QTDIR/bin%; - если сборка QT не статическая (без флага -static) Компиляция драйвера QT для других СУБД аналогично описанному выше способу, отличием будет лишь наличие других SDK Субд и клиентского драйвера (В нашем случае libpq.dll). Удачи! Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: BaltikS от Июль 16, 2009, 12:00 Я наверно чего-то не понимаю: делаю все по топикам, но получаю только .a файл на выходе, а dll`ками не пахнет. проверь пункт 4 и 5.Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: Disaron от Июль 16, 2009, 12:03 Я нашел свою ошибку - не надо было CONFIG+=STATIC вписывать :) СПАСИБО!
Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: BaltikS от Июль 16, 2009, 12:06 При выполнении все пунктов можно и со static. Только заново Qt собирать надо. В этом случае дравер у тебя будет включен в исполняемый файл. И не забывай, что за собой всегда надо таскать libpq.dll.
Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: Disaron от Июль 16, 2009, 12:10 BaltikS, огромный тебе решпект! Все заработало и проблема была в ODBC. C родным драйвером все прекрасно.
Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: BaltikS от Июль 16, 2009, 12:20 Да нзчто...всегда рад помочь ;)........если конечно знаю чем... :)
Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: Disaron от Июль 16, 2009, 13:28 Ан нет, рано обрадовался.
Не обратил внимания на то что забивал и прочитал то, что уже существовало. Та же канитель с кракозябрами, только теперь еще почему-то часть запросов отвалилась, при этом если меняю тип соединения - все работает. Соединение поднимается в единственном сырце и работает на все приложение. Код: #include "connection.h" select * from fn_pred_list(); //отрабатывает всегда select * from fn_pred_insert(:name_pred, :name_pred_s) //не отрабатывает, хотя отрабатывает если я в форме использую dbconnected(), а не dbconnectedlnx() Может есть какие-то нюансы в использовании QPSQL? UP: Опаньки, executedQuery возвращает select * from fn_pred_insert(?, ?) оно плейсхолдеры что-ли не поддерживает? В случае с одбц запрос нормальный возвращается. Вот такой код биндит все нужные значения: Код: QSqlQuery wBaseList::FillQueryFields(QString query, QStringList params) Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: BaltikS от Июль 16, 2009, 15:49 Погоди, так вопрос в кодировке или не выполнении запроса? Какой PostgreSQL? По-поводу кодировки всё должно быть в норме.... Потому как лет 5 уже под него пишу и каких то отклонений существенных не наблюдаю...
Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: Disaron от Июль 16, 2009, 15:55 вопроса теперь оба :)
postgre 8.3 причем boundvalue("") возвращает прибинденное значение, но результат запроса - пустой. среда - QtCreator, Qt 4.5.2 Конечно нет пока возможности проверить на никсах - это когда домой приду. UP: вопрос с неотработкой запроса снимается - нашел свой косяк, спасибо qDebug() << sqlQuery.boundValues() :) кодировка пока на той-же стадии... :( UP2: с кодировкой вопрос тоже снят, теперь точно - можно закрывать. ::) UP3: кстати чтобы уж завершить: в одбц все равно кракозябры. :) так что не зря повозился. Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: Примерный ученик от Июль 21, 2009, 10:37 При выполнении все пунктов можно и со static. Только заново Qt собирать надо. В этом случае дравер у тебя будет включен в исполняемый файл. И не забывай, что за собой всегда надо таскать libpq.dll. Как показывает мой опыт, нужно еще таскатьcomerr32.dll krb5_32.dll libeay32.dll libiconv-2.dll libintl-2.dll ssleay32.dll Только тогда наличие PostgreSQL на компе не нужно Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: Пантер от Июль 21, 2009, 11:42 Можно самому собрать постгрес и тогда нужно будет только libpq.dll
Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: BaltikS от Июль 21, 2009, 13:36 Можно самому собрать постгрес и тогда нужно будет только libpq.dll +1Примерный ученик, твой опыт видимо ещё достаточно мал :).... Без обид.... Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: Примерный ученик от Июль 21, 2009, 16:38 Можно самому собрать постгрес и тогда нужно будет только libpq.dll +1Примерный ученик, твой опыт видимо ещё достаточно мал :).... Без обид.... Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: BaltikS от Июль 21, 2009, 17:41 Примерный ученик, так то оно так, только вот из за этой великолепной пятёрки DLL, в NT 4, libpq - не пашет ;)...
Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: Примерный ученик от Июль 22, 2009, 13:05 Примерный ученик, так то оно так, только вот из за этой великолепной пятёрки DLL, в NT 4, libpq - не пашет ;)... К счастью, мои проги будут работать начиная с WINDOWS 2000. Там проблем нет.А за инфу спасибо. Зарекаться от чего либо глупо. Сделаю зарубку на память... Название: Re: Qt + PostgreSQL + UTF-8 Отправлено: Khs от Июль 22, 2009, 13:48 Можно самому собрать постгрес и тогда нужно будет только libpq.dll +1Примерный ученик, твой опыт видимо ещё достаточно мал :).... Без обид.... а зачем пересобирать весь postgresql, можно собрать libpq отдельно, секундное дело.. |