1

我正在使用mymysql将记录插入到 Go 中的 MySQL 数据库中。

我正在尝试将 UTF-8 编码的数据插入表中。如果我直接使用 mysql 命令提示符插入数据,它工作正常。如果我使用 mymysql,L’ Échafaud则变为L’ Échafaud.

据我了解,mymysql 默认使用 UTF-8。以防万一我添加了明确的db.Register("set names utf8"),但这也没有帮助。

如果我在插入字符串之前将它们打印到屏幕上,它们似乎被正确编码。

我还需要在 Go 中做些什么来插入 UTF-8 编码的字符串吗?

以下是相关的代码部分:

func NewDbConnection(dbName string, dbServer string, dbUser string, dbPass string) (*Db, error) {
    me := Db{}
    me.Conn = mysql.New("tcp", "", dbServer, dbUser, dbPass, dbName)
    err := me.Conn.Connect()
    me.Conn.Register("set names utf8")
    return &me, err
}

func (db *Db) InsertRelease(r Release) (uint64, error) {
    stmt, err := db.Conn.Prepare(`insert into releases
        (name,artist_id,itunes_id,genre,label_name,image_source,
        created_at,updated_at,date,scraped,itunes)
        values (?,?,?,?,?,?,?,?,?,true,?)`)

    res, err := stmt.Run(r.Name, r.ArtistID, r.ItunesID, r.Genre, r.LabelName,
        r.ImageURL, r.CreatedAt, r.UpdatedAt, r.ReleaseDate, r.ItunesURL)
    return res.InsertId(), err
}

type Release struct {
    ID, ArtistID, ItunesID, ArtistItunesID, Type int
    Name, ImageURL, Genre, LabelName             string
    ItunesURL                                    string
    ReleaseDate, CreatedAt, UpdatedAt            time.Time
}
4

0 回答 0