2013-08-02 66 views
0

我在嘗試向Firebird數據庫中插入值時遇到問題。我使用十六進制表示法將值插入到表中。Firebird向表格中插入十六進制值(算術例外)

我做一個插入這樣的:

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

,當我嘗試插入值大於0x7FFF的更大,會出現問題。我知道,所有的火鳥變量簽名,每當我試圖像插入值0x8000我應該得到一個值-32768,但我不斷收到這樣的信息:

引擎代碼:335544321引擎消息:

算術異常,數值溢出或字符串截斷數字 值超出範圍

它看起來就像當我嘗試插入爲0x8000火鳥認爲它是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 
); 

回答

2

火鳥會看到符號位而不是SMAILLINT。在範圍0 .. 7FFFFFF它將是積極的,在範圍80000000 .. FFFFFFFF它將是負面的。範圍中的值將是INTEGER。您可以預先置零以強制該值爲BIGINT。但是,沒有線索表明它的行爲與SMAILLINT的行爲相同。所以值0x8000應該是並超出的邊界SMALLINT。您可以參考here