odbc 方式接入 sql server,字段类型为 varchar 时,返回值是乱码。如何解决? #1679

Open
opened 2020-05-11 04:54:03 +00:00 by hjzCy · 2 comments

在不修改 sql 字段类型为 nvarchar 的情况下,如何解决?例如:

type TblCityArea struct {
    Id            int    `xorm:"pk autoincr" json:"id"`
    Area          string `xorm:varchar(30) json:"area"`
    Pid           string `xorm:varchar(50) json:"pid"`
    Area_FullName string `xorm:"area_FullName" json:"area_FullName"`
}

func (tbl *TblCityArea) TableName() string {
    return "tblCity_Area"
}

func main() {
    engine, err = xorm.NewEngine("odbc", "driver=SQL Server;server=localhost;database=JingDian")
    area := new(tables.TblCityArea)
    has, _ := engine.Get(area)
    if has {
        fmt.Println("area:", area)  // 打印:area: &{1 ���� 0 ������}
    }
}
在不修改 sql 字段类型为 `nvarchar` 的情况下,如何解决?例如: ```go type TblCityArea struct { Id int `xorm:"pk autoincr" json:"id"` Area string `xorm:varchar(30) json:"area"` Pid string `xorm:varchar(50) json:"pid"` Area_FullName string `xorm:"area_FullName" json:"area_FullName"` } func (tbl *TblCityArea) TableName() string { return "tblCity_Area" } func main() { engine, err = xorm.NewEngine("odbc", "driver=SQL Server;server=localhost;database=JingDian") area := new(tables.TblCityArea) has, _ := engine.Get(area) if has { fmt.Println("area:", area) // 打印:area: &{1 ���� 0 ������} } } ```
Owner

Could you try nvarchar?

Could you try `nvarchar`?
Author

@lunny nvarchar 没乱码,但是数据库基本不能改了,因为已经有很多数据了。我试过用 go-mmsql 这个库,通过 odbc 方式连接,就算是 varchar 也没有出现乱码。但是 go-mmsql 似乎不支持 sql server 2000。

这个问题我应该解决?

@lunny `nvarchar` 没乱码,但是数据库基本不能改了,因为已经有很多数据了。我试过用 `go-mmsql` 这个库,通过 odbc 方式连接,就算是 `varchar` 也没有出现乱码。但是 `go-mmsql` 似乎不支持 sql server 2000。 这个问题我应该解决?
lunny added the
db
sqlserver
label 2020-06-04 01:28:16 +00:00
Sign in to join this conversation.
No Milestone
No Assignees
2 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#1679
No description provided.