我有一个PostgreSQL 9.4.5表,表中有一个基本字符数据类型的列,即如下所示:
CREATE TABLE films (
code char(5) CONSTRAINT firstkey PRIMARY KEY,
title varchar(40) NOT NULL);
然后,我使用绑定的QByteArray使用QSqlQuery插入数据:
QSqlQuery query;
query.prepare("INSERT INTO films VALUES (1, ?)");
const QByteArray film("Avatar");
query.addBindValue(film);
query.exec();
在Ubuntu 15.10中,电影名称以字节的形式出现在表格中:
\x417661746172
在Windows上,它以字符的形式出现。
在不显式地将QByteArray转换为QString的情况下,有没有办法告诉QSqlQuery或PostgreSQL将数据作为字符串处理,以便它在Ubuntu上像在Windows上一样工作?
发布于 2016-02-03 19:10:42
尝试使用bindValue
而不是addBindValue
。请参阅此link。
发布于 2019-06-10 01:13:41
我在Windows上的Qt5.6和在debian上的PostgresSQL 9.6也有同样的问题。当使用64位编译时,bytea被读取为二进制。当使用32位编译时,bytea被读取为十六进制。
CREATE TABLE image (
id serial,
name text,
picture bytea
);
sql_query.prepare("SELECT id, name, picture FROM image");
...
QByteArray name = sql_query.value("name").toByteArray();
QByteArray Picture = SQL_query.value("Picture").toByteArray();
varchar read with both (32-bit and 64-bit) into QByteArray as string.
//Output 64-Bit application:
name = "Test", Picture = "‰PNG\r\n\x1a\n\0\0..."
//Output 32-Bit application:
Name = "Test", Picture = "x89504e470d0a1a0a0000..."
我在open后添加了下面的查询,现在它可以工作了
QSqlQuery sql_query;
sql_query.exec("SET bytea_output = 'escape'");
两个postgres驱动程序都来自pg 9.5,64位来自已安装的Postgres,32位是在zip文件中下载的。两者具有相同的名称"libpq.dll“
https://stackoverflow.com/questions/35174982
复制相似问题