Озадачился тут намедни работой с guid из Firebird... Долго рассказывать, но для комфортной работы пришлось слегка модифицировать драйвер QFIREBIRD. Давно этим драйвером пользуюсь, выражаю своё почтение автору

GUID'ы в FB принято хранить в виде CHAR(16) OCTETS. Попытка работы с таким "сырым" гуидом с помощью этого драйвера провалилась - в нём все строки преобразовываются в QString и использованием текстового кодека. А в случае гуидов это не строка, а фиксированный набор байт, который с сервера приходит как строка. Да ещё и 0x00 в середине легко попасться может.
В общем, в модифицированном драйвере:
1. Зарегистрирован и декларирован тип QUuid, чтобы можно было им пользоваться в QVariant.
2. Проводится автоматическое распознавание столбца GUID по следующим условиям:
- домен называется UUID
- это CHAR (16) OCTETS
3. Фактически, при открытии соединения с базой делается служебный запрос по метаданным и заполняется хэш, где каждому столбцу каждой таблицы присваивается признак true или false. В дальнейшем для доопределения типа столбца с гуид этот столбец сверяется с хэшем.
4. При помещении в запрос (bindValue) тип QUuid сериализуется в 16-байтный std::string.
5. К сожалению, для комфортного использования нужно в своём приложении не забыть написать Q_DECLARE_METATYPE(QUuid). В каком-нибудь хидере.
Примерно так можно пользоваться:
В запросе
SQL
SELECT id, name FROM dir d
id - это UUID
Выполняем запрос, получаем данные:
QSqlQuery q(db);
q.exec("select id, name from dir d");
q.next();
QUuid uid=q.value(0).value<QUuid>();
Передаём данные в запрос:
QUuid id;
QSqlQuery q(db);
db.transaction();
q.prepare("select dscr from dir where id=?");
q.bindValue(0,QVariant::fromValue(id));
Так как QUuid нестандартный для QVariant тип данных, то приходится делать всякие QVariant::fromValue(id) и value<QUuid>().
Для удобства я оперделил макрос
#define VUUID(variant) variant.value<QUuid>()
Так-что могу делать вот так:
QUuid uid=VUUID(q.value(0));
вместо
QUuid uid=q.value(0).value<QUuid>();
Даёшь GUID!
*** Блин, забыл в начале про селективные процедуры

Сейчас поправил - гуиды работают и из селективных процедур.