今天在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 關注
- 138 瀏覽
添加回答
舉報
0/150
提交
取消