Maison  >  Article  >  développement back-end  >  Problème d'encodage MySQL lors de l'insertion à l'aide du pilote Go

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

WBOY
WBOYavant
2024-02-09 16:00:10549parcourir

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

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

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer