首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >QSqlQuery将QByteArray作为字符串插入到PostgreSQL中

QSqlQuery将QByteArray作为字符串插入到PostgreSQL中
EN

Stack Overflow用户
提问于 2016-02-03 18:50:18
回答 2查看 1.3K关注 0票数 2

我有一个PostgreSQL 9.4.5表,表中有一个基本字符数据类型的列,即如下所示:

代码语言:javascript
复制
CREATE TABLE films (
    code        char(5) CONSTRAINT firstkey PRIMARY KEY,
    title       varchar(40) NOT NULL);

然后,我使用绑定的QByteArray使用QSqlQuery插入数据:

代码语言:javascript
复制
QSqlQuery query;
query.prepare("INSERT INTO films VALUES (1, ?)");
const QByteArray film("Avatar");
query.addBindValue(film);
query.exec();

在Ubuntu 15.10中,电影名称以字节的形式出现在表格中:

代码语言:javascript
复制
\x417661746172

在Windows上,它以字符的形式出现。

在不显式地将QByteArray转换为QString的情况下,有没有办法告诉QSqlQuery或PostgreSQL将数据作为字符串处理,以便它在Ubuntu上像在Windows上一样工作?

EN

回答 2

Stack Overflow用户

发布于 2016-02-03 19:10:42

尝试使用bindValue而不是addBindValue。请参阅此link

票数 0
EN

Stack Overflow用户

发布于 2019-06-10 01:13:41

我在Windows上的Qt5.6和在debian上的PostgresSQL 9.6也有同样的问题。当使用64位编译时,bytea被读取为二进制。当使用32位编译时,bytea被读取为十六进制。

代码语言:javascript
复制
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后添加了下面的查询,现在它可以工作了

代码语言:javascript
复制
  QSqlQuery sql_query;
  sql_query.exec("SET bytea_output = 'escape'");

两个postgres驱动程序都来自pg 9.5,64位来自已安装的Postgres,32位是在zip文件中下载的。两者具有相同的名称"libpq.dll“

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35174982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档