2016-04-06 38 views
0

复杂,以表达我的问题的所有字符(UTF-8),我尝试:转到查询(DB2)提供不从表

我有一个DB2表(内部代码页CP850)

create table codes (code character(2)) 

用UTF-8字符

insert into codes values('ÖÖ') 

linux下DB2的客户端select * from codes的数据集提供

code 
ÖÖ 

如预期。

现在转到部分,这是有问题的。

我的模型看起来像

package codes 
type Code struct { 
    Code db.NullString `json:"code" sql:"code"` 
} 
type Codes []*Code 

和我的查询看起来像

package codes 
func FindAll()(Codes, error) { 
    result := make(Codes, 0) 
    row, err := db.Query(nil, 'SELECT c.code FROM codes c'); 
    //errorhandling... 
    for rows.Next() { 
    c := &Code{} 
    rows.Scan(&c.Code) 
    log.PrintLn(c.Code)  // <== 'Ö' 
    result = append(result, c) 
    } 
    return result, nil 
} 

此日志只打印一个Ö,而不是两个。我知道这是因为符文Ö不是内存中的一个字节。但我不知道去哪里寻找和修复,因为这是我第一次尝试去。

(遗漏我是否可以提供?)

回答

0

你无法扫描到你的结构,你要扫描到一个sql.NullString变量或string,然后分配给你的结构:

for rows.Next() { 
    var s sql.NullString 
    rows.Scan(&s) 
    c := Code{Code: s} 

    log.PrintLn(c.Code)  // <== 'Ö' 
    result = append(result, c) 
} 

另外:字段标签sql没有任何作用(或者你使用sqlx?如果是,你必须使用StructScan而不是扫描)

+0

仍然是相同的结果:我的“正常”数据集包含两个字符,除了那些有两个字节UTF-8编码 –