我使用Qt4和MySQL5对二进制值的字符编码有一些问题。Qt4和MySQL5 - 作为二进制数据绑定QByteArray“1:1”
假设我们想绑定一个包含四个字节0的值。我检查使用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"
这显然是解释为latin1的编码的字符串,然后编码为UTF8字符串的\xDE \xAD \xBE \xEF
十六进制代码。
如果我不使用addBindValue()将值绑定,但将其直接放入查询中,使用UNHEX('DEADBEEF')
将导致预期行为(这并不令人意外......)。
UTF8编码步骤发生在哪里?
(最后,我想为二进制值存储。 “1:1” 到BLOB字段)
OS: Ubuntu的10.10(32位)
Qt的版本: 4.7.0( Ubuntu的软件包)
的MySQL版本: 5.1.49-1ubuntu8.1
提前感谢!
好吧,我认为这与我的MySQL服务器本身的设置有关。我如何检查/测试/设置默认连接编码? – leemes 2011-02-18 20:49:16