Название: PostgreSQL 9 и поле bytea Отправлено: Примерный ученик от Октябрь 18, 2017, 18:51 Цитировать Тип bytea поддерживает два внешних формата ввода и вывода: традиционный для PostgreSQL формат «спецпоследовательностей» и «шестнадцатеричный». Входные данные принимаются в обоих форматах, а формат выходных данных зависит от параметра конфигурации bytea_output; по умолчанию выбран шестнадцатеричный. База импортирована из 8.1. Параметр bytea_output выставлен в 'escape'. Те данные, которые уже были в базе - читаются корректно, а вот вновь записанные обратно читаются как "шестнадцатиричные". Как с этим бороться? ??? Название: Re: PostgreSQL 9 и поле bytea Отправлено: GraninDm от Октябрь 20, 2017, 12:54 Код драйвера смотрели?
Может по коду понятнее будет? Какая версия Qt? Название: Re: PostgreSQL 9 и поле bytea Отправлено: GraninDm от Октябрь 20, 2017, 13:26 Из документации
When entering bytea values in escape format, octets of certain values must be escaped, while all octet values can be escaped. https://www.postgresql.org/docs/9.0/static/datatype-binary.html (https://www.postgresql.org/docs/9.0/static/datatype-binary.html) И напишите пример кода как вы работаете с bytea? Название: Re: PostgreSQL 9 и поле bytea Отправлено: Примерный ученик от Октябрь 20, 2017, 20:17 Qt 3.3.8
В поле хранятся разнородные данные, могут быть текстовые, могут быть двоичные. Сначала считывается в массив байт, а потом обрабатывается в соответствии с типом данных. Код чтения из SQL-запроса Код:
Для PostgreSQL До 8-й версии включительно все работало как надо. При переходе на 9-ю версию все работать перестало. Существующие в БД данные воспринимаются корректно, а вот вновь записанные - воспринимаются как 16-е, хотя в конфигурационном файле указано СУБД, что с полем bytea работать escape. Название: Re: PostgreSQL 9 и поле bytea Отправлено: GraninDm от Октябрь 23, 2017, 12:10 В Qt 5.6 в коде драйвера есть такой case
Код: case QVariant::ByteArray: { А вот в 3.3.8 я не смотрел. Посмотрите сами... А думаю 3.3.8 ничего про 9 постгрес не знает. Может быть скомпилить драйвер с изменениями. Одно время я для себя немного драйвер допиливал, пока этe функциональность не включили в Qt. Название: Re: PostgreSQL 9 и поле bytea Отправлено: Примерный ученик от Октябрь 23, 2017, 15:58 спасибо, подумаю
Название: Re: PostgreSQL 9 и поле bytea Отправлено: Примерный ученик от Октябрь 23, 2017, 20:43 Не хочется в драйвер лазить... Может кто подскажет, как hex преобразовать bytea старого типа?
Название: Re: PostgreSQL 9 и поле bytea Отправлено: GraninDm от Октябрь 24, 2017, 08:31 А то, что я уже написал, пробовали?
When entering bytea values in escape format, octets of certain values must be escaped, while all octet values can be escaped. Код: r += QLatin1Char('\''); Название: Re: PostgreSQL 9 и поле bytea Отправлено: Примерный ученик от Октябрь 25, 2017, 10:33 Драйвер для QT5 очень уж много чем отличается от драйвера для qt3. Интересно, а можно как то его собрать под QT3?
Название: Re: PostgreSQL 9 и поле bytea Отправлено: Примерный ученик от Ноябрь 07, 2017, 15:08 Решил проблему обработкой bytea после считывания в память. Там все нулевые байты и байты с 1 в старшем бите заменены на "\ххх" (косая черта и десятичное значение байта тремя восьмеричными цифрами). Ну и еще, если есть как символ сама косая черта, то она продублирована и одну надо удалить.
|