php小編魚仔帶給大家關於使用Go驅動插入時MySQL編碼問題的解決方法。使用Go編寫MySQL插入操作時,有時會遇到編碼不一致的問題,導致資料插入出現亂碼或無法插入的情況。這篇文章將為大家詳細介紹如何解決這個問題,讓你的資料插入操作更加順暢。
我正在嘗試將 utf-8 文字儲存到編碼為 latin1_swedish_ci 的表中。我無法更改編碼,因為我無法直接存取資料庫。所以我正在嘗試使用這個提供編碼器的 go 庫將文字編碼為 latin-1,並且這個庫具有包裝編碼器的函數,以便它替換無效字元而不是返回錯誤。
但當我嘗試插入行時,mysql 抱怨 error 1366:第 1 行
列「description」的字串值不正確:「\\xe7\\xe3o pa...」。
我嘗試將相同的文字寫入文件,並且 file -i
報告此 file.txt: application/octet-stream;字元集=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
文字時,mysql 會很樂意從 latin1 轉換為 utf8。但你必須告訴它你的客戶端正在使用 latin1。這可能是在連接 mysql 期間完成的,目前可能預設為 utf8 或 utf-8 或 utf8mb4。有點像
charset=latin1
以上是使用Go驅動插入時MySQL編碼問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!