Use string values for SQL statements. Convert to and from *big.Int
values. For example,
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.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)
}
}
Database:
mysql> DESCRIBE dec65;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| n | decimal(65,0) | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
mysql> SELECT n FROM dec65;
+-----------------------------+
| n |
+-----------------------------+
| 12345678901234567891234567 |
| -12345678901234567891234567 |
| NULL |
+-----------------------------+
Output:
n: 12345678901234567891234567
n: -12345678901234567891234567
n: <nil>
n: -12345678901234567891234567