今天在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/sqlpsqlInfo := 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列中插入连接字符串,则不会出现错误。这里发生了什么?
1 回答
茅侃侃
TA贡献1842条经验 获得超21个赞
您无法将整数转换为这样的字符串。的结果string(0)
是"\x00"
,又名空字节,而不是"0"
您可能想要的。您应该改为使用strconv.Itoa
转换。
- 1 回答
- 0 关注
- 109 浏览
添加回答
举报
0/150
提交
取消