ホームページ >バックエンド開発 >Golang >golang odbcコードが文字化けする

golang odbcコードが文字化けする

WBOY
WBOYオリジナル
2023-05-21 22:59:08902ブラウズ

golang を使用して ODBC に接続すると、中国語の文字化けの問題が発生することがあります。この記事では、この問題を解決する方法を説明します。

まず、ドライバーをインストールする必要があります。 golang には ODBC ライブラリ (odbc) があり、ODBC API を介してさまざまなデータベースに接続できます。ただし、データベースに接続するには ODBC ドライバーが必要です。ここでは SQL Server を例として、ODBC ドライバーをダウンロードした後、指示に従ってインストールします。

ODBC ドライバーをインストールした後、golang からデータベースに接続する必要があります。ここでは、サードパーティの ODBC ライブラリ「jmoiron/sqlx」を使用します。このライブラリをインストールする方法は次のとおりです。

go get github.com/jmoiron/sqlx

このライブラリは、ODBC データ ソースに接続するための便利な方法を提供します。しかし、残念ながら、デフォルトでは Unicode 文字セットをサポートしていないため、中国語の文字化けの問題が発生します。

次が解決策です:

オプション 1: dsn を使用します

dsn を使用する方法は次のとおりです:

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

ここでは DSN を使用します。 ODBC データ ソースへの文字列接続。この文字列には、データ ソース名 (DSN) とソースへの接続の詳細が含まれます。この例では、SQL Server Native Client 11.0 ドライバーを使用してローカルの mydb データベースに接続します。この DSN 文字列では「;」や「=」などの特殊文字を使用できるため、エスケープする必要があることに注意してください。

オプション 2: 文字セットの設定

中国語の文字化けの問題を解決するために dsn を使用したくない場合は、odbc API を使用して接続された文字セットを手動で設定できます。 golang での文字セットの設定方法は次のとおりです。

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

ここでは、odbc API の「Exec」メソッドで SQL 文を実行し、文字セットを「UTF8」に設定します。

つまり、dsn または odbc API を使用して手動で文字セットを設定し、中国語の文字化けの問題を解決できます。どの方法でも、golang で ODBC データ ソースに接続し、漢字を正しく処理できます。

以上がgolang odbcコードが文字化けするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。