【发布时间】:2015-11-03 22:46:02
【问题描述】:
我不确定这是 Go 中的错误还是我不明白的问题。我有以下内容:
package main
import (
"database/sql"
"log"
"reflect"
_ "github.com/lib/pq"
)
func main() {
Db, err := sql.Open("postgres", "user=yoitsme password=openupitsme host=x.x.x.x dbname=mydb")
if err != nil {
log.Println(err)
}
rows, err := Db.Query("SELECT 1.3250::numeric, 8.548::decimal, 908.234::float, 1234::integer")
defer rows.Close()
for rows.Next() {
var col1, col2, col3, col4 interface{}
if err := rows.Scan(&col1, &col2, &col3, &col4); err != nil {
log.Println(err)
}
log.Println(col1, reflect.TypeOf(col1))
log.Println(col2, reflect.TypeOf(col2))
log.Println(col3, reflect.TypeOf(col3))
log.Println(col4, reflect.TypeOf(col4))
}
if err = rows.Err(); err != nil {
log.Println(err)
}
}
打印出来:
2015/08/11 09:35:47 [49 46 51 50 53 48] []uint8
2015/08/11 09:35:47 [56 46 53 52 56] []uint8
2015/08/11 09:35:47 908.234 float64
2015/08/11 09:35:47 1234 int64
所以,对于实际上是数字的前两列,我得到 []uint8(例如字符串)。最后两列与预期一致。根据 Postgresql Numeric & Decimal types are part of the SQL standard。那么,为什么 Go 不遵循他们的 database/sql 包中的 SQL 标准呢?是因为 Go 没有内置的“十进制”类型吗?由于语言的缺陷,database/sql 包将数字变成了字符串似乎是错误的......
【问题讨论】:
-
您没有任何字节切片...您的输出显示
[]uint8这是一个小的无符号整数。一个字节切片是[]byte。 -
@evanmcdonnal...啊,是的。谢谢!我已经更新了帖子。
-
@evanmcdonnal:byte is just an alias for uint8,例如:play.golang.org/p/2_VGNX6DmV
-
@JimB 啊,我看到了
[49 46 51 50 53 48] = "1.3250"。嗯,这是有道理的。
标签: postgresql go postgresql-9.4