>  기사  >  백엔드 개발  >  golang odbc 잘못된 코드

golang odbc 잘못된 코드

WBOY
WBOY원래의
2023-05-21 22:59:08878검색

golang을 사용하여 ODBC에 연결할 때 가끔 중국어 문자가 깨지는 문제가 발생할 수 있습니다. 이 기사에서는 이 문제를 해결하는 방법을 설명합니다.

먼저 드라이버를 설치해야 합니다. golang에는 ODBC API를 통해 다양한 데이터베이스에 연결할 수 있는 ODBC 라이브러리(odbc)가 있습니다. 그러나 데이터베이스에 연결하려면 ODBC 드라이버가 필요합니다. 여기서는 SQL Server를 예로 들어 ODBC 드라이버를 다운로드한 후 지침에 따라 설치합니다.

ODBC 드라이버를 설치한 후 golang에서 데이터베이스에 연결해야 합니다. 여기서는 타사 ODBC 라이브러리 "jmoiron/sqlx"를 사용합니다. 이 라이브러리를 설치하는 방법은 다음과 같습니다.

go get github.com/jmoiron/sqlx

이 라이브러리는 ODBC 데이터 소스에 연결하는 편리한 방법을 제공합니다. 하지만 아쉽게도 기본적으로 유니코드 문자 집합을 지원하지 않아 중국어 문자가 깨지는 문제가 발생합니다.

해결책은 다음과 같습니다.

옵션 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.