首頁  >  文章  >  後端開發  >  使用Go驅動插入時MySQL編碼問題

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

WBOY
WBOY轉載
2024-02-09 16:00:10508瀏覽

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

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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除