Qt4 и MySQL5 - связывание QByteArray "1: 1" в качестве двоичных данных - PullRequest
0 голосов
/ 15 февраля 2011

У меня есть некоторые проблемы с кодировкой символов двоичного значения с использованием Qt4 и MySQL5.

Допустим, мы хотим связать значение, содержащее четыре байта \xDE \xAD \xBE \xEF. Я проверяю привязанное значение, используя функцию MySQL HEX(), используя этот код:

#include <QtGui/QApplication>
#include <QDebug>
#include <QSqlQuery>
#include <QVariant>
#include <QSqlRecord>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    if(!db.open("test", "test"))
        exit(1);

    QSqlQuery q("SELECT HEX(?)");
    q.addBindValue(QVariant(QByteArray::fromHex("DEADBEEF")));
    if(!q.exec())
        exit(1);
    if(!q.next())
        exit(1);

    qDebug() << q.record().value(0).toString();

    return a.exec();
}

Вывод этого кода "DEADEFBFBDEFBFBD", который, очевидно, является кодом HEX \xDE \xAD \xBE \xEF, интерпретируемым как строка в латинском кодировке, а затем кодируется как строка UTF8.

Если я не связываю значение с помощью addBindValue (), но помещаю его непосредственно в запрос, используя UNHEX('DEADBEEF'), это приводит к ожидаемому поведению (что неудивительно ...).

Где происходит этап кодирования UTF8?

(Наконец, я хочу сохранить двоичное значение «1: 1» в поле BLOB.)

ОС: Ubuntu 10.10 (32 бита)
Версия Qt: 4.7.0 (пакет Ubuntu)
MySQL Version: 5.1.49-1ubuntu8.1

Заранее спасибо!

1 Ответ

0 голосов
/ 29 марта 2011

После нескольких недель проб и ошибок единственное решение, которое я нашел, - это передать двоичные данные в шестнадцатеричном коде и UNHEX() в запросе.

Это является решением, поэтому я позволю себе принять собственный ответ, но это не очень хорошее решение, и у меня нет объяснения поведению кода выше.

Так что, если у вас есть какой-либо совет, я с нетерпением жду дальнейшего ответа. (Я приму ваш ответ.) Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...