Maison > développement back-end > Golang > le corps du texte

Problème d'encodage MySQL lors de l'insertion à l'aide du pilote Go

WBOY
Libérer: 2024-02-09 16:00:10
avant
531 Les gens l'ont consulté

Problème dencodage MySQL lors de linsertion à laide du pilote Go

l'éditeur php Yuzai vous apporte une solution au problème d'encodage MySQL lors de l'utilisation du pilote Go pour insérer. Lorsque vous utilisez Go pour écrire des opérations d'insertion MySQL, vous rencontrez parfois des incohérences de codage, entraînant une insertion de données tronquées ou un échec d'insertion. Cet article vous présentera en détail comment résoudre ce problème et rendre votre opération d'insertion de données plus fluide.

Contenu de la question

J'essaie de stocker du texte utf-8 dans une table codée comme latin1_swedish_ci. Je ne peux pas modifier l'encodage car je n'ai pas d'accès direct à la base de données. J'essaie donc d'encoder du texte en latin-1 en utilisant cette bibliothèque go qui fournit un encodeur, et cette bibliothèque a des fonctions qui encapsulent l'encodeur afin qu'il remplace les caractères invalides au lieu de renvoyer une erreur.

Mais lorsque j'essaie d'insérer des lignes, mysql se plaint error 1366:第 1 行 Valeur de chaîne incorrecte pour la colonne "description": "\xe7\xe3o pa...".

J'ai essayé d'écrire le même texte dans un fichier et file -i 报告此 file.txt: application/octet-stream;字符集=binary.

Exemple

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))
}
Copier après la connexion

Il me manque probablement quelque chose de très évident, mais je connais très peu le codage.

Merci d'avance.

Solution

Vous attendez avec impatience çã ?

Le problème est facile à résoudre. Lorsque inserting envoie un texte, mysql se fera un plaisir de convertir de latin1 en utf8. Mais vous devez lui dire que votre client utilise latin1. Cela peut être fait lors de la connexion à MySQL, qui peut actuellement être par défaut utf8 ou utf-8 ou utf8mb4. Un peu comme

charset=latin1
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!