Russian Qt Forum

Qt => Базы данных => Тема начата: RedDog от Апрель 17, 2019, 21:44



Название: Postgres double в виде string-и )))
Отправлено: RedDog от Апрель 17, 2019, 21:44
Копаясь в исходниках Qt по работе с постгресовским драйвером, с удивлением обнаружил что тип double из драйвера приходит в виде стриги )))
Т.е. char* val ="3.14159265358", который потом конвертится через QString::toDouble()

Это реально так данные в постгресе лежат (подозреваю таки что нет) или это прикол драйвера? Почему не в bytea типе и хранить даблу в виде массива байт?
PS: Разные клиенты с разной точностью значения выводят.


Название: Re: Postgres double в виде string-и )))
Отправлено: lit-uriy от Апрель 18, 2019, 06:27
>>... это прикол драйвера?
Ага, В общем случае в СУБД созвучные типы данных по размеру не совпадают с типами Си++.

>>Почему не в bytea типе и хранить даблу в виде массива байт?
потому, что куча классов Qt, в том числе представления и модели умеют работать только с QString, а с некими уникальными массивами - нет


Название: Re: Postgres double в виде string-и )))
Отправлено: lit-uriy от Апрель 18, 2019, 06:36
Подробности смотри тут: https://doc.qt.io/qt-5/sql-types.html


Название: Re: Postgres double в виде string-и )))
Отправлено: RedDog от Апрель 18, 2019, 19:43
Не понятно вот какой момент: это Qt-ная обертка говорит постгресу выдавать числа в таком виде или сам постгрес не умеет их по другому выдавать?


Название: Re: Postgres double в виде string-и )))
Отправлено: lit-uriy от Апрель 19, 2019, 12:35
Я давно не ковырял драйверы БД, но вроде работает так:
БД возвращает данные как ей удобно, а драйвер Qt их переделывает под себя ориентируясь на тип конкретного поля.