New サムネイル CSSでプレースホルダー(placeholder)の色を変える:ベンダープレフィックスをカンマつ New サムネイル GolangでGoogle Cloud Storageに画像やファイルをアップロードする(os. New サムネイル GoでMySQLやMariaDBのtimestampを読みこむ:データベース接続時に?parse

GoでMySQLやMariaDBのtimestampを読みこむ:データベース接続時に?parseTime=trueを指定する

広告

Go でデータベースに接続するときは go-sql-driver/mysql などのドライバーを使う。接続する関数は次のようになる。

package utils

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "time"
)

func Connect(database string) *sql.DB {
    user := "root"
    pass := "pass"
    proto := "tcp(localhost:3306)"
    s := user + ":" + pass + "@" + proto + "/" + database + "?parseTime=true"
    db, err := sql.Open("mysql", s)
    if err != nil {
        fmt.Println(err)
    }
    db.SetConnMaxLifetime(time.Second * 5)
    return db
}

上のコードにはさまざまなポイントが隠されている。今回は mysql の timestamp といった日時を使えるようにするテクニックを紹介する。上の

s := user + ":" + pass + "@" + proto + "/" + database + "?parseTime=true"

という部分を見ると?の後に parseTime=true がある。これが日時をパースするためのコツ。これをつけると、下のコードがうまく動く。

db := utils.Connect("post_db")
query := "select title, description, date_created from post"
stmt, e := db.Prepare(query)
if e != nil {
    return
}
rows, e := stmt.Query(id)
if e != nil {
    return
}
for rows.Next() {
    e = rows.Scan(&post.Title, &post.Description, &post.DateCreated)
}

post.DateCreated という部分に注目。この date_created というカラムは timestamp 型である。もし

s := user + ":" + pass + "@" + proto + "/" + database

としたら、つまり ?parseTime=true をつけなかったらどうなるか。

広告

おそらく Scan して post.DateCreated に読みこんだ値は 0 である。これを回避するために

s := user + ":" + pass + "@" + proto + "/" + database + "?parseTime=true"

とする。すると

2019-06-28 15:45:44 +0000 UTC

といった日時が post.DateCreated に入る。

広告

広告

広告

コンピューター コンピューター
プログラミング プログラミング
数学 数学
英語 英語
国語 国語
理科 理科
社会 社会

Python入門

Python入門

化学入門

化学入門

漢字辞典

漢字辞典

整数辞典

漢字辞典

Lord Candy

Lord Candy