Rumah >pembangunan bahagian belakang >Golang >golang odbc kod kacau

golang odbc kod kacau

WBOY
WBOYasal
2023-05-21 22:59:08898semak imbas

Apabila menggunakan golang untuk menyambung ke ODBC, kadangkala anda akan menghadapi masalah aksara Cina yang kacau. Artikel ini akan menerangkan cara menyelesaikan masalah ini.

Pertama, kita perlu memasang pemacu. Terdapat perpustakaan ODBC (odbc) dalam golang, yang boleh menyambung ke pelbagai pangkalan data melalui API ODBC. Walau bagaimanapun, kami memerlukan pemacu ODBC untuk menyambung ke pangkalan data. Di sini, kami mengambil SQL Server sebagai contoh Selepas memuat turun pemacu ODBC, ikut arahan untuk memasangnya.

Selepas memasang pemacu ODBC, kita perlu menyambung ke pangkalan data dari golang. Di sini, kami akan menggunakan perpustakaan ODBC pihak ketiga "jmoiron/sqlx". Begini cara memasang pustaka ini:

go get github.com/jmoiron/sqlx

Pustaka ini menyediakan cara yang mudah untuk menyambung ke sumber data ODBC. Tetapi malangnya, ia tidak menyokong set aksara Unicode secara lalai, yang membawa kepada masalah aksara Cina yang kacau.

Berikut ialah penyelesaiannya:

Pilihan 1: Gunakan dsn

Kaedah menggunakan dsn adalah seperti berikut:

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

Di sini, kami menggunakan rentetan DSN sambungan ke sumber data ODBC. Rentetan ini mengandungi nama sumber data (DSN) dan butiran sambungan kepada sumber. Dalam contoh ini, kami menggunakan pemacu SQL Server Native Client 11.0 untuk menyambung ke pangkalan data mydb setempat. Ambil perhatian bahawa aksara khas seperti ";" dan "=" boleh digunakan dalam rentetan DSN ini, jadi ia perlu dilepaskan.

Pilihan 2: Tetapkan set aksara

Jika anda tidak mahu menggunakan dsn untuk menyelesaikan masalah kacau Cina, anda boleh menggunakan API odbc untuk menetapkan set aksara yang disambungkan secara manual. Kaedah menetapkan set aksara dalam golang adalah seperti berikut:

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

Di sini, kami melaksanakan pernyataan SQL melalui kaedah "Exec" API odbc, dengan itu menetapkan set aksara kepada "UTF8".

Ringkasnya, kita boleh menggunakan API dsn atau odbc untuk menetapkan set aksara secara manual untuk menyelesaikan masalah kacau Cina. Tidak kira kaedah mana pun, kami boleh menyambung ke sumber data ODBC dalam golang dan memproses aksara Cina dengan betul.

Atas ialah kandungan terperinci golang odbc kod kacau. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:parameter pembolehubah golangArtikel seterusnya:parameter pembolehubah golang