sql - 驱动程序将 uint64 参数转换为 int32 负值

标签 sql go firebird

我的 Firebird 程序采用几个具有 bigint 值的参数。 当我从 go 程序参数调用此过程时,其类型为 uint64,且值大于 max int32/2,存储为负数。 如何传递 bigint/uint64 值作为参数?

import (
   ...
    "database/sql"
    "github.com/arteev/firebirdsql"
)
...
type Data struct {
  Value uint64
  Sum   uint64
  Ts    time.Time
}
...
tx, _ := db.Begin()
st, err := tx.Prepare("execute procedure add_summary(?, ? ,? ,?, ?)")
if err != nil {
    tx.Rollback()
}
defer st.Close()
if _, err := st.Exec(ip, ifKey, port, data.Sum, data.Ts); err != nil {
  ...   
} else {
  ...
}
...

架构/表 DDL 片段:

CREATE TABLE ADM_SUMMARY (
    ITEM_ID  INTEGER NOT NULL,
    PERIOD   CHAR(1) NOT NULL,
    VAL      BIGINT NOT NULL,
    DT       TIMESTAMP NOT NULL,
    UNITS    CHAR(1) NOT NULL
);

过程DDL片段:

CREATE OR ALTER PROCEDURE ADD_SUMMARY (
    ip varchar(20),
    if_key varchar(20),
    if_num integer,
    val bigint,
    dt timestamp)
as...

我写了一个小测试: 测试代码

tx, err := db.Begin()
if err != nil {
    tx.Rollback()
}
_, err = tx.Exec("insert into test(B1) values(?)", uint64(2147483648))
if err != nil {
    fmt.Println(err)
}
tx.Commit()

测试表的DDL:

CREATE TABLE TEST (
    B1  BIGINT
);

结果:B1 = -2147483648

最佳答案

nakagami added a commit that referenced this issue 2 hours ago fix issue #112 92e5c50 nakagami closed this 2 hours ago

在我的错误报告几个小时后,作者将其关闭。 github.com/arteev/firebirdsql 上的错误报告仍然打开。 感谢大家的参与和建议。

关于sql - 驱动程序将 uint64 参数转换为 int32 负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62569662/

相关文章:

go - 编码(marshal)时间带小数点的时间

sql - 使用 Firebird.NET 2.5 执行 SQL 脚本时出现问题(错误代码 = -104)

.net - firebird插入数据,必须声明命令参数

database - Firebird 数据库密码

sql - mysql CREATE VIEW 不能从 mysql_query 工作

postgresql - 连接时 Gorm + Docker 错误

sql - Elasticsearchj存在和不存在的实现

json - 如何在 Gin 路由器中呈现静态文件?

sql - 用 'WITH RECURSIVE' 计算总价

php - SQL-在子句中使用LIKE时根据第一优先级对数据进行排序