gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 20:19:11 27 4
gpt4 key购买 nike

我的 Firebird 过程采用了几个具有 bigint 值的参数。
当我从 uint64 类型的 go 程序参数调用此过程时,值大于 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 fixissue #112 92e5c50 nakagami closed this 2 hours ago


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

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com