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

WBOY
Freigeben: 2024-02-09 16:00:10
nach vorne
531 Leute haben es durchsucht

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))
}
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!