我对 Go 还比较陌生。
我使用 github.com/go-sql-driver/mysql 作为我的驱动程序
我有一个表,其中包含许多数据类型为 decimal(65,0)
的列。
我正在尝试使用 big.Int 来处理我的应用程序中的这些值,这对我来说似乎是合理的。
但是,我找不到使用 Stmt.Exec 将值插入数据库的方法。
它说
"sql: converting argument $2 type: unsupported type big.Int, a struct"
此外,我也找不到将其从 mysql 序列化回我的 Go 结构的方法。
最佳答案
对 SQL 语句使用字符串值。与 *big.Int
值之间进行转换。例如,
package main
import (
"fmt"
"log"
"math/big"
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
func printN(rows *sql.Rows) {
for rows.Next() {
var n *big.Int
var s sql.NullString
err := rows.Scan(&s)
if err != nil {
log.Print(err)
}
n, _ = new(big.Int).SetString(s.String, 10)
fmt.Printf("n: %v\n", n.String())
}
err := rows.Err()
if err != nil {
log.Print(err)
}
}
func main() {
db, err := sql.Open("mysql", "peter:@/so")
if err != nil {
log.Fatal(err)
}
defer db.Close()
query := `SELECT n from so.dec65;`
rows, err := db.Query(query)
if err != nil {
log.Fatal(err)
}
printN(rows)
query = `SELECT n from so.dec65 WHERE n < ?;`
arg1, ok := new(big.Int).SetString("12345678901234567891234567", 10)
if ok {
rows, err = db.Query(query, arg1.String())
if err != nil {
log.Fatal(err)
}
printN(rows)
}
}
数据库:
mysql> DESCRIBE dec65;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| n | decimal(65,0) | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
mysql> SELECT n FROM dec65;
+-----------------------------+
| n |
+-----------------------------+
| 12345678901234567891234567 |
| -12345678901234567891234567 |
| NULL |
+----------------------------------------+
输出:
n: 12345678901234567891234567
n: -12345678901234567891234567
n: <nil>
n: -12345678901234567891234567
关于mysql - 如何使用Golang将值插入decimal(65,0)并从数据库中检索它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51536056/