Golang中国

当参数为中文时候。就会出现这个情况。有办法么?

strsql := "SELECT [Inventory] FROM [Character] where Name='" + "\u5e05\u54e5\u0030\u0030\u0031" + "'" strsql := "SELECT [Inventory] FROM [Character] where Name='" + "帅狗001" + "'"

stmt:log- 42000 [Microsoft][ODBC SQL Server Driver][SQL Server]'慐耍' 附近有语法错误。[Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句。

我直接用unicode码也不行。,非常感谢。

11 回复
nowayout
#1 nowayout • 2014-11-07 13:41
strsql := "SELECT [Inventory] FROM [Character] where Name=?"
stmt, err := db.Prepare(strsql)
rows, err := stmt.Query("帅狗001", "帅狗002","帅狗003") //
for rows.Next() {
....
} 
mtazrael
#2 mtazrael • 2014-11-07 13:57

你好我测试了下无效

strsql := "SELECT [Inventory] FROM [Character] where Name=?"
fmt.Println("sql:", strsql)
connsql, err := sql.Open("odbc", strconn)
if err != nil {
    fmt.Println("Connecting Error", err)
}
//stmt, err := connsql.Prepare(strsql)
if err != nil {
    fmt.Println("error:", err)
}
var (
    memb___id []byte
)
//varss := vars[0:]
err1 := connsql.QueryRow(strsql, "帅狗001").Scan(&memb___id)
nowayout
#3 nowayout • 2014-11-07 14:14
err1 := connsql.QueryRow(strsql, "帅狗001")//.Scan(&memb___id)
//这样也有错吗?
mtazrael
#4 mtazrael • 2014-11-07 14:17

你好,不会报错,但是中文字符sql不认。

mtazrael
#5 mtazrael • 2014-11-07 14:20

例如我们看到的输出是:SELECT [Inventory] FROM [Character] where Name=‘帅狗001’ 但是发送到数据库就不认了,这个帅狗001是Name字段里面存在值,这里用英语或字母就没有问题,感觉是转码的问题,但是找不到方法。

nowayout
#6 nowayout • 2014-11-07 14:27
type SPReturn struct {
Inventory string
}

func FetchAllRowsPtr(query string, struc interface{}, cond ...interface{}) *[]interface{} {
db, err := sql.Open("odbc", ConnectString)
if err != nil {
    panic(err)
}
defer db.Close()
stmt, err := db.Prepare(query)
if err != nil {
    panic(err)
}
defer stmt.Close()

rows, err := stmt.Query(cond...)
if err != nil {
    panic(err)
}
defer rows.Close()

result := make([]interface{}, 0)
s := reflect.ValueOf(struc).Elem()
leng := s.NumField()
onerow := make([]interface{}, leng)
for i := 0; i < leng; i++ {
    onerow[i] = s.Field(i).Addr().Interface()
}
for rows.Next() {
    err = rows.Scan(onerow...)
    if err != nil {
        panic(err)
    }
    result = append(result, s.Interface())
}

return &result
}

/*
result := *FetchAllRowsPtr(
    `SELECT [Inventory] FROM [Character] where Name=?`, 
    new(SPReturn), "帅狗001")
fmt.Printf("result: %v\n", result)
*/
// 另外再检查下数据库的语言, Collation我的是默认的Chinese_PRC_CI_AS
mtazrael
#7 mtazrael • 2014-11-07 14:47

好的谢谢,我试试看~

mtazrael
#8 mtazrael • 2014-11-07 14:54

您好,我尝试了还是不行。是不是我golang版本问题?方便加一下您的QQ么 我的QQ:1515638496

mtazrael
#9 mtazrael • 2014-11-10 09:47

问题已经解决了,感谢大牛的帮助,原因出在驱动上面。我用的驱动比较古老

now_to_do
#10 now_to_do • 2016-12-09 16:45

你好,我的是插入数据,字段有汉字,出现同样问题,请问你的怎么解决,你说的驱动是odbc驱动吗?

jIAnSoft
#11 jIAnSoft • 2016-12-11 19:33

strsql := “SELECT [Inventory] FROM [Character] where Name=N’” + “帥狗001” + “‘“
在字串前加 N 試看看

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。