代码之家  ›  专栏  ›  技术社区  ›  Langdon

使用SQL Server中的无符号bigint

  •  1
  • Langdon  · 技术社区  · 15 年前

    我尝试使用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排序之外)?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Joe    15 年前

    我至少会看一下varbinary字段,因为在将无符号/有符号的字段转换成bigint时会有很多这样的问题。

        2
  •  3
  •   gbn    15 年前

    您可以使用decimal(p,0)和check约束来确保>=0。

    选择p为足够大的整数

    推荐文章