我正在尝试使用Microsoft SQL Server存储和检索未签名的int64(并最终使用ADO.NET EF),但我遇到了一些麻烦。由于您无法在SQL Server中将整数列指定为unsigned,因此我尝试使用二进制(8),但这并不像我预期的那样工作。以下查询导致意外值(0x03E8000000000000和281474976710656000):
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似乎运行第一个更新语句(我在转换我的ulong变量时使用BitConverter.ToBytes())。
如果我想在SQL Server中存储无符号的64位整数,这是我最好的选择吗?有没有比使用BitConverter更好的选择(除了编写自己的LPAD数组以及适当数量的零)?
答案 0 :(得分:3)
您可以使用小数(p,0)和检查约束来确保> = 0。
选择p足够大的正整数
答案 1 :(得分:1)
我至少会看一下varbinary字段,因为你会在未签名/签名到BIGINT时遇到很多这类问题。