去版本:18.3 github.com/go-sql-driver/mysql v1.6.0
当查询字符串是 db.Query("SELECT * FROM logs ORDER BY log_id DESC LIMIT 1,3 ")
如果 log_id == 8
b, _ := rawValue.([]byte)
下面是vscode的调试信息,b是正确的
b: []uint8 len:1,cap 1,[56] ; 字符串():“8”
当我使用 db.Query("SELECT * FROM logs ORDER BY log_id DESC LIMIT ?,? ", 1,3)
如果 log_id == 8
在b, _ := rawValue.([]byte)
信息是
b: []uint8 only :0 ,cap:0 ,nil
原始值8
不是56
和 user(string) 在两者中都运行良好。
CREATE TABLE logs (
`log_id` INT(6) NOT NULL AUTO_INCREMENT,
`user` VARCHAR(10),
PRIMARY KEY(log_id)
);
代码
db, _:= sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/log")
rows, _ := db.Query("SELECT * FROM logs ORDER BY log_id DESC LIMIT ?,? ", 1, 3)
col, _ := rows.Columns()
defer rows.Close()
count := len(col)
values := make([]interface{}, count)
for i := range values {
var ii interface{}
values[i] = &ii
}
ret := make([]map[string]interface{}, 0)
fmt.Println("Reading data:")
for rows.Next() {
_ = rows.Scan(values...)
m := make(map[string]interface{}, 0)
for i, colname := range col {
rawValue := *(values[i].(*interface{}))
b, _ := rawValue.([]byte)
if colname == "log_id" {
v, _ := strconv.Atoi(string(b))
m[colname] = v
} else if colname == "log_msg_id" {
v, _ := strconv.Atoi(string(b))
m[colname] = v
} else {
v := string(b)
m[colname] = v
}
}
偶然的你
相关分类