今天在Postgres使用database/sql驱动程序操作数据时发生了一个奇怪的错误github.com/lib/pq。我在 中创建了以下 SQL 架构Postgres:
CREATE TABLE IF NOT EXISTS bench_bytea (
id INT PRIMARY KEY,
name VARCHAR,
data BYTEA
);
一个非常基本的表,包含类型为 的数据 blob BYTEA。
然后我尝试使用提供的函数执行简单的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)
}
关键的亮点发生在db.Exec()我执行 SQL INSERT 语句的行上(实际上i是一个数组的索引,我在其中存储了不同的测试data。我不想在这里包含其他数据,因为它真的很长并且不相关)。我收到的错误是:
pq: invalid byte sequence for encoding "UTF8": 0x00
现在,如果我更改"testing "+string(i)为"testing",错误就消失了。也就是说,如果我没有在name列中插入连接字符串,则不会出现错误。这里发生了什么?
茅侃侃
相关分类