Qt/QSqlQuery:绑定到BLOB字段时,二进制数据被解释为字符串

2024-10-01 11:27:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从文件中读取二进制数据,并尝试将其存储在MySql数据库的LONGBLOB字段中。
我使用Python和PySide来实现这一点。在

我的问题是,二进制数据被解释为字符串,这意味着当数据中出现新行时,数据会被截断。在

这似乎是一个Python或PySide问题,因为如果我在MySql提示符中手动添加数据,它就可以完美地工作。
<强>编辑< /强>:我刚才用C++用QT尝试过,我也有同样的问题。在

我的表定义如下:
CREATE TABLE blobtest (id INT PRIMARY KEY AUTO_INCREMENT, data 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保存数据,但它仍然被截断

^{pr2}$

有人知道我可能做错了什么吗?在


Tags: 数据字符串数据库编辑dbdatamysql二进制
1条回答
网友
1楼 · 发布于 2024-10-01 11:27:53

当在数据中找到空字符('\0')时,数据确实被截断。在C++中,必须用这种方式创建^ {< CD1}}:

QByteArray data = QByteArray("start\n\0\n\0\n\0\nend", 15);

我不知道python,但我认为您还必须创建一个QByteArray。在

相关问题 更多 >