当字段为NULL时,通过 Get 获取 map[string]string 类型会报无法转换错误:converting NULL to string is unsupported #1824

Closed
opened 2020-11-03 07:50:23 +00:00 by MadX · 0 comments

TestCode:

package main

import (
	"fmt"

	_ "github.com/go-sql-driver/mysql"
	"xorm.io/xorm"
	"xorm.io/xorm/log"

)

func main() {
	testNULL()
}
type Test3Table struct {
	ID   int32  `xorm:"bigint autoincr pk id"`
	UID  string `xorm:"varchar(64) uid"`
	Name string `xorm:"varchar(64) null name"`
}

func (s *Test3Table) TableName() string {
	return "test_3_t"
}

func testNULL() {
	dbXorm, err := xorm.NewEngine("mysql", dbUrl)
	if err != nil {
		fmt.Println("open db err:", err.Error())
		return
	}
	dbXorm.SetLogLevel(log.LOG_DEBUG)
	dbXorm.Logger().ShowSQL(true)

	tb := &Test3Table{UID: "test_uid"}
	dbXorm.Sync2(tb)
	fmt.Println("sync succ")

	_, err = dbXorm.Exec("INSERT INTO `test_3_t` (`uid`) VALUES (?)", "test_uid2")
	if err != nil {
		fmt.Println("insert err:", err.Error())
		return
	}

	var valuesMap = make(map[string]string)
	_, err = dbXorm.Table(tb.TableName()).Where("uid=?", "test_uid2").Cols("uid", "name").Get(&valuesMap)
	if err != nil {
    	//err: sql: Scan error on column index 1, name "name": converting NULL to string is unsupported
		fmt.Println("get err:", err.Error())
		return
	}
	fmt.Println("get map:", valuesMap)
}
TestCode: ``` package main import ( "fmt" _ "github.com/go-sql-driver/mysql" "xorm.io/xorm" "xorm.io/xorm/log" ) func main() { testNULL() } type Test3Table struct { ID int32 `xorm:"bigint autoincr pk id"` UID string `xorm:"varchar(64) uid"` Name string `xorm:"varchar(64) null name"` } func (s *Test3Table) TableName() string { return "test_3_t" } func testNULL() { dbXorm, err := xorm.NewEngine("mysql", dbUrl) if err != nil { fmt.Println("open db err:", err.Error()) return } dbXorm.SetLogLevel(log.LOG_DEBUG) dbXorm.Logger().ShowSQL(true) tb := &Test3Table{UID: "test_uid"} dbXorm.Sync2(tb) fmt.Println("sync succ") _, err = dbXorm.Exec("INSERT INTO `test_3_t` (`uid`) VALUES (?)", "test_uid2") if err != nil { fmt.Println("insert err:", err.Error()) return } var valuesMap = make(map[string]string) _, err = dbXorm.Table(tb.TableName()).Where("uid=?", "test_uid2").Cols("uid", "name").Get(&valuesMap) if err != nil { //err: sql: Scan error on column index 1, name "name": converting NULL to string is unsupported fmt.Println("get err:", err.Error()) return } fmt.Println("get map:", valuesMap) } ```
lunny added this to the 1.2.0 milestone 2021-06-12 08:28:14 +00:00
lunny added the
kind
bug
label 2021-06-12 08:28:21 +00:00
lunny closed this issue 2021-07-07 11:16:52 +00:00
Sign in to join this conversation.
No Milestone
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: xorm/xorm#1824
No description provided.