I'm using the mymysql to insert records into a MySQL DB in Go.
I am attempting to insert UTF-8 encoded data into a table. If I insert the data directly using the mysql command prompt, it works fine. If I use mymysql, L’ Échafaud
becomes L’ Échafaud
.
It was my understanding that mymysql uses UTF-8 by default. Just in case I added the explicit db.Register("set names utf8")
but that hasn't helped either.
If I print the strings to screen before inserting them, they appear to be encoded correctly.
Is there something else I need to do in Go to insert UTF-8 encoded strings?
Here are the relevant code sections:
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
}