Maison  >  Article  >  développement back-end  >  golang odbc code tronqué

golang odbc code tronqué

WBOY
WBOYoriginal
2023-05-21 22:59:08842parcourir

Lorsque vous utilisez Golang pour vous connecter à ODBC, vous rencontrerez parfois le problème des caractères chinois tronqués. Cet article explique comment résoudre ce problème.

Tout d’abord, nous devons installer le pilote. Il existe une bibliothèque ODBC (odbc) dans Golang, qui peut se connecter à diverses bases de données via l'API ODBC. Cependant, nous avons besoin d'un pilote ODBC pour nous connecter à la base de données. Ici, nous prenons SQL Server comme exemple. Après avoir téléchargé le pilote ODBC, suivez les instructions pour l'installer.

Après avoir installé le pilote ODBC, nous devons nous connecter à la base de données depuis Golang. Ici, nous utiliserons la bibliothèque ODBC tierce "jmoiron/sqlx". Voici comment installer cette bibliothèque :

go get github.com/jmoiron/sqlx

Cette bibliothèque offre un moyen pratique de se connecter aux sources de données ODBC. Mais malheureusement, il ne prend pas en charge le jeu de caractères Unicode par défaut, ce qui entraîne le problème des caractères chinois tronqués.

Voici la solution :

Option 1 : Utiliser dsn

La méthode d'utilisation de dsn est la suivante :

import (
    "github.com/jmoiron/sqlx"
    "database/sql"
)

func main() {
    connStr := "driver={SQL Server Native Client 11.0};server=127.0.0.1;database=mydb;uid=sa;pwd=password;Trusted_Connection=yes;"
    db, err := sqlx.Connect("odbc", connStr)
    if err != nil {
        log.Fatalln(err)
    }
    db.SetMaxIdleConns(2)
    db.SetMaxOpenConns(0)
    defer db.Close()
    
    rows, err := db.Query("SELECT * FROM mytable")
    if err != nil {
        log.Fatalln(err)
    }
    defer rows.Close()
    
    var (
        id int
        name string
    )
    
    for rows.Next() {
        err := rows.Scan(&id, &name)
        if err != nil {
            log.Fatalln(err)
        }
        fmt.Println(id, name)
    }
}

Ici, nous utilisons la chaîne DSN pour nous connecter à la source de données ODBC. Cette chaîne contient le nom de la source de données (DSN) et les détails de la connexion à la source. Dans cet exemple, nous utilisons le pilote SQL Server Native Client 11.0 pour nous connecter à la base de données mydb locale. Notez que les caractères spéciaux tels que ";" et "=" peuvent être utilisés dans cette chaîne DSN, ils doivent donc être échappés.

Option 2 : Définir le jeu de caractères

Si vous ne souhaitez pas utiliser DSN pour résoudre le problème du chinois tronqué, vous pouvez utiliser l'API odbc pour définir manuellement le jeu de caractères connecté. La méthode de définition du jeu de caractères dans golang est la suivante :

import (
    "github.com/jmoiron/sqlx"
    "database/sql"
    "strconv"
)

func main() {
    connStr := "driver={SQL Server Native Client 11.0};server=127.0.0.1;database=mydb;uid=sa;pwd=password;Trusted_Connection=yes;"
    db, err := sqlx.Connect("odbc", connStr)
    if err != nil {
        log.Fatalln(err)
    }
    db.SetMaxIdleConns(2)
    db.SetMaxOpenConns(0)
    defer db.Close()
    
    // 设置字符集
    _, err = db.Exec("SET NAMES 'UTF8'")
    if err != nil {
        log.Fatalln(err)
    }
    
    rows, err := db.Query("SELECT * FROM mytable")
    if err != nil {
        log.Fatalln(err)
    }
    defer rows.Close()
    
    var (
        id int
        name string
    )
    
    for rows.Next() {
        err := rows.Scan(&id, &name)
        if err != nil {
            log.Fatalln(err)
        }
        fmt.Println(id, name)
    }
}

Ici, nous exécutons une instruction SQL via la méthode "Exec" de l'API odbc, définissant ainsi le jeu de caractères sur "UTF8".

En bref, nous pouvons utiliser l'API dsn ou odbc pour définir manuellement le jeu de caractères afin de résoudre le problème du chinois tronqué. Quelle que soit la méthode utilisée, nous pouvons nous connecter à la source de données ODBC dans Golang et traiter correctement les caractères chinois.

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:
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
Article précédent:paramètres variables GolangArticle suivant:paramètres variables Golang