当前位置: 首页 > 知识库问答 >
问题:

database/sql Exec()函数因连接字符串而失败

夏立果
2023-03-14

今天,当使用数据库/sql和驱动程序github.com/lib/pq操作Postgres中的数据时,出现了一个特殊的错误。我在Postgres中创建了以下SQL模式:

CREATE TABLE IF NOT EXISTS bench_bytea (
    id INT PRIMARY KEY,
    name VARCHAR,
    data BYTEA
);

一个非常基本的表,其中包含类型为BYTEA的数据blob。

然后,我尝试使用database/sql提供的Exec()函数执行简单的INSERT语句。这是:

psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+
    "password=%s dbname=%s sslmode=disable",
    host, port, user, password, dbname)

db, err := sql.Open("postgres", psqlInfo)
if err != nil {
    panic(err)
}
defer db.Close()

stmt := `INSERT INTO bench_bytea (id, name, data) VALUES ($1, $2, $3) ON CONFLICT (id) DO NOTHING`
data := `{"title": "Sleeping Beauties", "genres": ["Fiction", "Thriller", "Horror"], "published": false}`
i := 0

_, err = db.Exec(stmt, i, "testing "+string(i), []byte(data))
if err != nil {
    panic(err)
}

突出显示的关键点出现在执行SQL INSERT语句的db.Exec()行上(实际上I是一个数组的索引,我在该数组中存储了不同的测试数据。我不想在这里包含其他数据,因为它非常长且不相关)。我收到的错误是:

pq: invalid byte sequence for encoding "UTF8": 0x00

现在,如果我将“testing”字符串(I)更改为“testing”,则错误消失。也就是说,如果我没有在name列中插入串联字符串,那么就没有错误。这是怎么回事?

共有1个答案

宗政卓
2023-03-14

您不能将整数转换为这样的字符串。字符串(0)的结果是"\x00",也就是空字节,而不是"0",这可能是您想要的。你应该使用strconv。Itoa用于转换。

 类似资料:
  • 我正在开发一个程序,该程序将获取一个文本文件,并将数字从0-99转换为文字(即0)- 这里有几行输出(每一行都是不同的system.out行): 这是输入文件上的三行: 如您所见,数字随系统一起添加和打印。从函数convertToWord中退出,但一旦返回main,就会丢失。如何跨函数将这些转换附加到字符串?

  • 我有一个函数应用,定义如下 其中< code > let-test-this-in 和< code > let-test-this-out 是连接字符串为< code >“defaultendpointsprocol=”的存储帐户下现有存储队列的名称...;account name =…;AccountKey= ... "(直接从门户中的访问键-连接字符串复制而来)。我发布时生成的function

  • 问题内容: 为什么在这些情况下输出不同? ==> 印刷:2010年 ==> 打印:200 为什么第一个输出不是30?它与运算符优先级有关吗?就像首先将“ printing”和x连接在一起,然后将结果字符串和y连接在一起?我对么? 问题答案: 它的规则 我在下面显示从高到低的优先顺序: **如果运算符具有相同的优先级 ,* 则 此方法起作用 * 现在 :是字符串” :是Java中唯一将Number连

  • 问题内容: 我正在使用Oracle SQL开发人员版本3.0.04。我试图使用该功能将数据分组在一起。 但是,我不断收到错误消息, 我很确定输出可能会超过4000,因为这里提到的WEB_LINK是url stem和url query的串联值。 有没有解决的办法,或者还有其他选择吗? 问题答案: 由于聚合字符串的长度可以超过4000个字节,因此不能使用该函数。您可能会创建一个用户定义的集合函数,该函

  • 问题内容: 在vertica中有一个表:像这样测试: 如何使用聚合函数或如何编写查询以获取像这样的数据(vertica语法)? 问题答案: 首先,您需要为编译udx 。 然后,您可以执行如下查询: 使用rtrim摆脱最后一个’,’。 如果您需要以某种方式对聚合进行排序,则可能需要在嵌入式视图中或使用first进行选择/排序。