Heim  >  Artikel  >  Backend-Entwicklung  >  MySQL-Codierungsproblem beim Einfügen mit dem Go-Treiber

MySQL-Codierungsproblem beim Einfügen mit dem Go-Treiber

WBOY
WBOYnach vorne
2024-02-09 16:00:10508Durchsuche

MySQL-Codierungsproblem beim Einfügen mit dem Go-Treiber

php-Editor Yuzai bietet Ihnen eine Lösung für das MySQL-Kodierungsproblem, wenn Sie zum Einfügen den Go-Treiber verwenden. Wenn Sie Go zum Schreiben von MySQL-Einfügungsvorgängen verwenden, treten manchmal Codierungsinkonsistenzen auf, die zu verstümmelten Dateneinfügungen oder zu Fehlern beim Einfügen führen. In diesem Artikel erfahren Sie im Detail, wie Sie dieses Problem lösen und Ihren Dateneinfügungsvorgang reibungsloser gestalten können.

Frageninhalt

Ich versuche, UTF-8-Text in einer Tabelle mit der Codierung latin1_swedish_ci zu speichern. Ich kann die Kodierung nicht ändern, da ich keinen direkten Zugriff auf die Datenbank habe. Ich versuche also, Text mit dieser Go-Bibliothek, die einen Encoder bereitstellt, in Latin-1 zu kodieren, und diese Bibliothek verfügt über Funktionen, die den Encoder so umschließen, dass er ungültige Zeichen ersetzt, anstatt einen Fehler zurückzugeben.

Aber wenn ich versuche, Zeilen einzufügen, beschwert sich MySQL error 1366:第 1 行 Falscher Zeichenfolgenwert für Spalte „Beschreibung“: „\xe7\xe3o pa...“.

Ich habe versucht, denselben Text in eine Datei zu schreiben und file -i 报告此 file.txt: application/octet-stream;字符集=binary.

Beispiel

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))
}

Ich übersehe wahrscheinlich etwas sehr Offensichtliches, aber ich weiß sehr wenig über Codierung.

Vielen Dank im Voraus.

Lösung

Freust du dich auf çã?

Das Problem ist leicht zu lösen. Wenn inserting Text vorliegt, konvertiert MySQL problemlos von Latin1 nach UTF8. Sie müssen ihm jedoch mitteilen, dass Ihr Client latin1 verwendet. Dies kann während der Verbindung zu MySQL erfolgen, das derzeit standardmäßig auf utf8, utf-8 oder utf8mb4 eingestellt ist. Ein bisschen wie

charset=latin1

Das obige ist der detaillierte Inhalt vonMySQL-Codierungsproblem beim Einfügen mit dem Go-Treiber. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen