我尝试使用Microsoft SQL Server(并最终使用ADO.NET EF)存储和检索未签名的Int64,但遇到了一些问题。由于在SQL Server中不能将整型列指定为无符号列,所以我尝试使用二进制(8),但这并不像我预期的那样工作。以下查询导致意外值(0x03E80000000000和28147497671070656000):
UPDATE table SET uint64 = 0x3E8
SELECT uint64, cast(uint64 as bigint) FROM table
但是,如果我运行以下命令,它似乎可以正常工作(返回0x000000000003E8,1000):
UPDATE table SET uint64 = 1000
SELECT uint64, cast(uint64 as bigint) FROM table
但不幸的是,由实体框架创建的SQL似乎运行了第一条更新语句(在转换ulong变量时,我使用bitconverter.tobytes())。
如果要在SQL Server中存储无符号64位整数,这是我的最佳选择吗?有没有比使用bitconverter更好的选择(除了写我自己的以适当数量的零对数组进行lpad排序之外)?