1

mymysqlを使用して、Go の MySQL DB にレコードを挿入しています。

UTF-8 でエンコードされたデータをテーブルに挿入しようとしています。mysql コマンド プロンプトを使用してデータを直接挿入すると、正常に動作します。mymysql を使用すると、 にL’ ÉchafaudなりL’ Échafaudます。

mymysql はデフォルトで UTF-8 を使用するというのが私の理解でした。念のため明示的に追加しましたdb.Register("set names utf8")が、それも役に立ちませんでした。

文字列を挿入する前に画面に出力すると、正しくエンコードされているように見えます。

UTF-8 でエンコードされた文字列を挿入するために、Go で他に何かする必要がありますか?

関連するコード セクションは次のとおりです。

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