[英]MySQL encoding problem when inserting with Go driver
我正在嘗試將 utf-8 文本存儲到編碼為 latin1_swedish_ci 的表中。 我無法更改編碼,因為我無法直接訪問數據庫。 所以我正在嘗試的是使用這個提供編碼器的 Go 庫將文本編碼為 latin-1,這個庫有一個 function 來包裝編碼器,這樣它就可以替換無效字符而不是返回錯誤。
但是,當我嘗試插入行 mysql 時,會抱怨Error 1366: Incorrect string value: '\\xE7\\xE3o pa...' for column 'description' at row 1
。
我嘗試將相同的文本寫入文件和file -I
報告此file.txt: application/octet-stream; charset=binary
file.txt: application/octet-stream; charset=binary
。
例子
package main
import (
"fmt"
"os"
"golang.org/x/text/encoding"
"golang.org/x/text/encoding/charmap"
)
func main() {
s := "foo – bar"
encoder := charmap.ISO8859_1.NewEncoder()
encoder = encoding.ReplaceUnsupported(encoder)
encoded, err := encoder.String(s)
if err != nil {
panic(err)
}
fmt.Println(s)
fmt.Println(encoded)
fmt.Printf("%q\n", encoded)
/* file test */
f, err := os.Create("file.txt")
if err != nil {
panic(err)
}
defer f.Close()
w := encoder.Writer(f)
w.Write([]byte(s))
}
我可能遺漏了一些非常明顯的東西,但我對編碼的了解很差。
在此先感謝。
你期待çã
嗎?
問題很容易解決。 INSERTing
很樂意在插入文本時將 latin1 翻譯成 utf8。 但是你必須告訴它你的客戶正在使用 latin1。 這可能是在連接到 MySQL 期間完成的,目前可能默認為 utf8 或 UTF-8 或 utf8mb4。 有點像
charset=latin1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.