gpt4 book ai didi

postgresql - 数据库/sql Exec()函数失败,并置字符串

转载 作者:行者123 更新时间:2023-12-01 22:08:39 24 4
gpt4 key购买 nike

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

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

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

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

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是存储不同测试 data的数组的索引。我不想在这里包括其他数据,因为它真的很长而且无关)。我收到的错误是:
pq: invalid byte sequence for encoding "UTF8": 0x00

现在,如果我将 "testing "+string(i)更改为 "testing",则错误消失了。也就是说,如果我没有在 name列中插入连接字符串,则不会有错误。这里发生了什么?

最佳答案

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

关于postgresql - 数据库/sql Exec()函数失败,并置字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59383539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com