为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
函数式编程 2023-08-14 16:15:35
今天在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转换。



查看完整回答
反对 回复 2023-08-14
  • 1 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信