我正在嘗試將 txt 寫入 postgres 批量導入器。該代碼當前崩潰,因為應該插入到 postgres 的字符串不是有效的 UTF8:pq: invalid byte sequence for encoding UTF8: 0x00在我的代碼中,我正在檢查字符串是否為有效的 UTF8。我錯過了什么?代碼:for { line, more := <-lineChannel splitLine := strings.SplitN(line, ":", 2) if len(splitLine) == 2 { if utf8.Valid([]byte(splitLine[0])) && utf8.Valid([]byte(splitLine[1])) { lineCount++ _, err = stmt.Exec(splitLine[0], splitLine[1]) if lineCount%int64(copySize) == 0 { _, err = stmt.Exec() if err != nil { log.Fatal("Failed at stmt.Exec", err) } err = stmt.Close() if err != nil { log.Fatal("Failed at stmt.Close", err) } err = txn.Commit() if err != nil { log.Fatal("failed at txn.Commit", err) } txn, err = db.Begin() if err != nil { log.Fatal("failed at db.Begin", err) } stmt, err = txn.Prepare(pq.CopyIn("pwned", "username", "password")) if err != nil { log.Fatal("failed at txn.Prepare", err) } if lineCount%(int64(copySize)*10) == 0 { log.Printf("Inserted %v lines", lineCount) } } if err != nil { log.Println("error:", splitLine[0], splitLine[1]) log.Fatal(err) } }編輯:出錯的行:字節[]:[116 109 97 105 108 46 99 111 109 58 104 117 115 104 112 117 112 112 105 101 115 108 111 118 101]線:[email protected]:hushpuppieslove分割線[0] + 分割線[1]:[email protected] hushpuppieslove
1 回答

白衣非少年
TA貢獻1155條經驗 獲得超0個贊
0x00 是空字符,postgres 不允許在字符串中使用。從文檔:
NULL (0) 字符是不允許的,因為文本數據類型不能存儲此類字節。
您需要刪除空字符。
- 1 回答
- 0 關注
- 139 瀏覽
添加回答
舉報
0/150
提交
取消