Firebird将十六进制值插入表中(算术异常)

2024-09-27 18:01:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我在尝试将值插入firebird数据库时遇到了一个问题。我使用十六进制表示法将值插入表中。在

我正在做这样的插入:

INSERT INTO ACCELEROMETER (PHYSICALID, XACCEL, YACCEL, ZACCEL, TIMEEPOCH,
    TIMEOFFSET, TSTAMP)
VALUES (2, 0x12DF,  0x8000, 0x12, 0x45612, 0x0, current_timestamp);

当我试图插入一个大于0x7FFF的值时,就会出现问题。我知道所有firebird变量都是有符号的,所以每当我试图插入一个像0x8000这样的值时,我应该得到一个值-32768,但是我一直收到这样的消息:

Engine Code : 335544321 Engine Message :

arithmetic exception, numeric overflow, or string truncation numeric value is out of range

当我试图插入0x8000 firebird时,它似乎认为它是32768,这显然行不通,因为它比SMALLINT字段允许的大。我的印象是,如果我插入十六进制值,firebird会看到最高有效位被设置,它会知道这是一个负值。我是不是少了点什么??在

谢谢

这是桌子:

^{pr2}$

Tags: 数据库engineinsert表示法firebirdnumericinto将值
1条回答
网友
1楼 · 发布于 2024-09-27 18:01:00

Firebird会看到符号位,但不会看到smailant。范围0。。7FFFFFF为正,范围80000000。。FFFFFFFF它将为负。范围内的值将是整数。您可以预先加零以强制值为BIGINT。但没有迹象表明,它对SMAILLINT也会有同样的行为。因此值0x800032768并超出SMALLINT的边界。你可以参考here。在

相关问题 更多 >

    热门问题