我正在尝试使用ODBC来查询IBM iSeries服务器(IBM i) https://code.google.com/p/odbc/。我似乎认为我在第一次测试时有一段时间工作,但是 服务器已更新,iSeries Access已更新,我正在使用Go 1.3.1
似乎连接正常,但查询导致错误。我猜我错过了驱动程序或查询正确的东西 编码,但我不知道如何解决它,或者它可能是odbc库的错误,我应该在那里打开一个问题。
我的代码如下:
package main
import (
_ "code.google.com/p/odbc"
"database/sql"
"fmt"
"log"
)
func main() {
db, err := sql.Open("odbc", `
Driver=iSeries Access ODBC Driver;
System=myhost;
Uid=myuserid;
Pwd=mypassword`)
if err != nil {
log.Fatal(err)
}
defer db.Close()
rows, err := db.Query("SELECT 1 FROM sysibm.sysdummy1")
if err != nil {
log.Fatal(err)
}
var number int
for rows.Next() {
rows.Scan(&number)
}
fmt.Println(number)
}
运行上述内容时,收到以下错误消息:
SQLPrepare: {42000} [IBM][System i Access ODBC Driver][DB2 for i5/OS]SQL0104 - Error message text unavailable.
Message can not be translated successfully.
任何想法出了什么问题,我可以检查什么,或者我如何让它发挥作用?
我在Linux VM上进行了测试,这可以使用确切的代码。我可以使用pyodbc和Python在我的Windows机器上使用等效代码进行连接,所以这必须是Windows上这个ODBC库的某种问题。我认为除非有其他想法,否则我将尝试其他一些库或者向图书馆作者打开一份错误报告。
答案 0 :(得分:0)
只是在黑暗中拍摄 - 系统CCSID设置为什么? DSPSYSVAL QCCSID。如果它是65535,那意味着系统语言是'二进制 - 不翻译'。如果是这种情况,您可能需要在连接字符串中设置CCSID。
答案 1 :(得分:0)
我在Ubuntu 18和Centos 8上也有同样的问题(尽管使用.net)。它在Centos 7上运行。找不到调整odbc配置或连接字符串的任何解决方法。但是在将驱动程序升级到1.1.0.13之后,该问题已修复。