- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在从文件中读取二进制数据并尝试将其存储在 MySql 数据库的 LONGBLOB 字段中。
为此,我使用 Python 和 PySide。
我的问题是,二进制数据被解释为字符串,这意味着当数据中出现换行符时数据被截断。
这似乎是 Python 或 PySide 的问题,因为如果我在 MySql 提示中手动添加数据,它会完美地工作。
编辑:我刚刚使用 C++ 在普通 Qt 上进行了尝试,但我遇到了同样的问题。
我的表定义如下:CREATE TABLE blobtest(id INT PRIMARY KEY AUTO_INCREMENT,数据 LONGBLOB NOT NULL;
下面是复制器。
from PySide.QtSql import QSqlDatabase, QSqlQuery, QSql
def testit():
db = QSqlDatabase.addDatabase("QMYSQL")
db.setHostName("localhost")
db.setDatabaseName("testdb")
db.setUserName("user")
db.setPassword("pass")
db.open()
query = QSqlQuery(db)
data = "start\n\0\n\0\n\0end"
query.prepare("INSERT INTO blobtest (data) VALUES(:data)")
query.bindValue(":data", data, QSql.In | QSql.Binary)
query.exec_()
db.close()
###############################################################################
if __name__ == "__main__":
testit()
编辑:这里是同一个复制器的 c++ 变体。我正在使用 QByteArray 来保存数据,但它仍然被截断
#include <QtSql/QtSql>
#include <QtCore/QByteArray>
int main(int argc, char* argv[]) {
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("testdb");
db.setUserName("user");
db.setPassword("pass");
db.open();
QSqlQuery query = QSqlQuery(db);
QByteArray data = QByteArray("start\n\0\n\0\n\0\nend");
query.prepare("INSERT INTO blobtest (data) VALUES(:data)");
query.bindValue(":data", data, QSql::In | QSql::Binary);
query.exec();
db.close();
return 0;
}
有谁知道我可能做错了什么吗?
最佳答案
当在数据中发现 NULL 字符 ('\0') 时,数据才真正被截断。在 C++ 中,您必须以这种方式创建 QByteArray
:
QByteArray data = QByteArray("start\n\0\n\0\n\0\nend", 15);
我不懂 python,但我认为您也必须创建一个 QByteArray
。
关于python - Qt/QSql查询 : Binary data is interpreted as string when binding to BLOB field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8657086/
我正在使用 Qt5 访问 MySQL 数据库。使用 QSqlQuery + prepare() + bindValue() 很容易执行 INSERT 查询。 现在我注意到 bindValue() 有一
如何从“数据库”向表“test”插入二进制数据,其中包含 2 列文本“name”和 bin“pic” QSqlDatabase db = QSqlDatabase::addDatabase("QPSQ
我最近开始发现需要从 __mysql 模块更改为 PyQt 的 QSql,但不知道从哪里开始。我想做的(现在)就是从数据库中读取并打印结果。这是我得到的最远的,但我不断收到从 query.exec_(
我正在尝试将数据插入表中。这是代码: void AddContacts::saveContact() { QString first_name = ui->lineFirstName->tex
我想将一些值插入到 SQLite 表中。 查询是: insert into TableName (field1,field2,field3) values (field1val, field2val,
出于某些(好吧,性能)原因,Qt 的“模型”类仅从数据库中获取 256 行,因此如果您想将该行追加到记录集的末尾,显然,您必须按照以下方式做一些事情 while (model->canFetchMor
我想生成一个足够简单的应用程序,它使用 QTreeView 小部件来显示 SQLite3(平面)表中的分层数据,使用 QDataWidgetMapper 填充一些行编辑字段,允许用户编辑,从而更新表。
我在使用 Qt 的 C++ 项目中使用 native sqlite 库(合并 1file),我围绕它创建了一个简单的包装器,但我在插入和选择长 UTF-8 文本时遇到问题。 我使用这段代码来插入数据:
考虑以下与 postgres 数据库的交互: QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL"); db.setHostName("acidali
我是一名优秀的程序员,十分优秀!