我試圖存儲和檢索使用Microsoft SQL Server(並最終使用ADO.NET EF)的unsigned int64,但我遇到了一些麻煩。既然你不能指定一個整數列作爲無符號SQL Server中,我嘗試使用二進制(8),但是這不符合我的預期。下面的查詢將導致意外值(0x03E8000000000000和281474976710656000):在SQL Server中使用未簽名的BIGINT
UPDATE table SET uint64 = 0x3E8
SELECT uint64, cast(uint64 as bigint) FROM table
如果我運行下面的,但是,它似乎工作正常(返回0x00000000000003E8,1000):
UPDATE table SET uint64 = 1000
SELECT uint64, cast(uint64 as bigint) FROM table
但不幸的是,實體框架創建的SQL似乎運行第1條更新語句(我在轉換我的ulong變量時使用了BitConverter.ToBytes())。
這是我最好的選擇,如果我想在SQL Server中存儲一個無符號的64位整數?有沒有比使用BitConverter更好的選擇(除了寫我自己的LPAD陣列與適當數量的零)?
我不使用的數據類型BIGINT足夠大..我正在使用二進制(8)。二進制和varbinary有什麼區別? – Langdon 2010-01-27 12:37:47
呃,我想我可以Google。 varbinary(8)似乎工作正常,並沒有表現出相同的行爲。謝謝! – Langdon 2010-01-27 12:43:56