У меня есть некоторые проблемы с кодировкой символов двоичного значения с использованием 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
Заранее спасибо!