簡體   English   中英

用Go驅動插入時出現MySQL編碼問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM