Home >Backend Development >Golang >golang odbc garbled code

golang odbc garbled code

WBOY
WBOYOriginal
2023-05-21 22:59:08902browse

When using golang to connect to ODBC, sometimes you will encounter the problem of Chinese garbled characters. This article will explain how to solve this problem.

First, we need to install the driver. There is an ODBC library (odbc) in golang, which can connect to various databases through ODBC API. However, we need an ODBC driver to connect to the database. Here, we take SQL Server as an example. After downloading the ODBC driver, follow the instructions to install it.

After installing the ODBC driver, we need to connect to the database from golang. Here, we will use the third-party ODBC library "jmoiron/sqlx". How to install this library is as follows:

go get github.com/jmoiron/sqlx

This library provides a convenient way to connect to ODBC data sources. But unfortunately, it does not support the Unicode character set by default, which leads to the problem of Chinese garbled characters.

The following is the solution:

Option 1: Use dsn

The method of using dsn is as follows:

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

Here, we use DSN string connection to the ODBC data source. This string contains the data source name (DSN) and details of the connection to the source. In this example, we use the SQL Server Native Client 11.0 driver to connect to the local mydb database. Note that special characters such as ";" and "=" can be used in this DSN string, so they need to be escaped.

Option 2: Set character set

If you don’t want to use dsn to solve the Chinese garbled problem, you can use the odbc API to manually set the connected character set. The method of setting the character set in golang is as follows:

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

Here, we execute a SQL statement through the "Exec" method of the odbc API, thereby setting the character set to "UTF8".

In short, we can use dsn or odbc API to manually set the character set to solve the problem of Chinese garbled characters. No matter which method, we can connect to the ODBC data source in golang and process Chinese characters correctly.

The above is the detailed content of golang odbc garbled code. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn