Я читаю двоичные данные из файлов и пытаюсь сохранить их в поле LONGBLOB в базе данных MySql.
Для этого я использую Python и PySide.
Моя проблема в том, что двоичные данные интерпретируются как строка, то есть данные усекаются при появлении в данных новой строки.
Кажется, это проблема Python или PySide, потому что, если я добавляю данные вручную в командной строке MySql, это прекрасно работает.
Редактировать : Я только что попробовал его с обычным Qt, используя C ++, и у меня там та же проблема.
Моя таблица определена следующим образом:
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 для хранения данных, но он все еще усекается
#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;
}
Кто-нибудь знает, что я могу делать не так?