当我尝试将值插入 firebird 数据库时遇到问题。我正在使用十六进制表示将值插入表中。
我正在做这样的插入:
INSERT INTO ACCELEROMETER (PHYSICALID, XACCEL, YACCEL, ZACCEL, TIMEEPOCH,
TIMEOFFSET, TSTAMP)
VALUES (2, 0x12DF, 0x8000, 0x12, 0x45612, 0x0, current_timestamp);
当我尝试插入一个大于 0x7FFF 的值时,就会出现问题。我知道所有 firebird 变量都已签名,因此每当我尝试插入像 0x8000 这样的值时,我应该得到一个值 -32768,但我不断收到此消息:
引擎代码:335544321 引擎消息:
算术异常、数值溢出或字符串截断数值超出范围
看起来当我尝试插入 0x8000 时,firebird 认为它是 32768,这显然不起作用,因为它比 SMALLINT 字段所允许的更大。我的印象是,如果我插入十六进制值,firebird 会看到最高有效位已设置,它会知道这是一个负值。我在这里错过了什么吗?
谢谢,
这是表格:
RECREATE TABLE accelerometer (
id int not null primary key,
physicalId int not null, -- foreign key physicalDevice table
xAccel SMALLINT,
yAccel SMALLINT,
zAccel SMALLINT,
timeEpoch BIGINT,
timeOffset INTEGER,
tStamp timeStamp -- time stamp generated by the firebird db at the time a record is entered
);