如何在 SQL Server 中存储无符号 64 位整数?
我使用的应用程序使用相当大的数字,并且我需要将数据存储为无符号 64 位整数。 我更喜欢只存储它,而不用担心位操作或类似的事情,这样不同的程序可以以不同的方式使用数据。
I work with an application which uses rather big numbers and I need to store data as an unsigned 64-bit integer. I prefer to just store it without worrying about bit manipulation or anything like that so different programs can use the data in different ways.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以将值存储为
NUMERIC
类型,scale
为 0,这将保留所需的integer
语义。NUMERIC
类型允许负数,但您可以设置一个约束来要求正整数。NUMERIC
的最大精度
为 38 位十进制数字。2**64
大约有 18 或 19 位十进制数字,因此NUMERIC(19,0)
可能适合此数据。You can store the value in a
NUMERIC
type with ascale
of 0, which will retain theinteger
semantics required. TheNUMERIC
type will allow negative numbers, although you could set up a constraint to require positive integers.The maximum
precision
forNUMERIC
is 38 decimal digits.2**64
is somewhere around 18 or 19 decimal digits, soNUMERIC(19,0)
would likely work just fine for this data.AFAIK,您必须创建一个自定义类型。 指针这里虽然那篇文章更多的是限制负面数字...
AFAIK, You would have to create a custom type. Pointers here although that article is more for restricting negative numbers...
不要仅仅为了容纳无符号值而切换到更大的数据类型。 在 C# 中以及类似的其他语言,将 ulong(=无符号 64 位)值转换为 long(=有符号 64 位)并将其存储为 SQL-Server bigint(=有符号 64 位)。 返回时将 bigint 读取为 long 并用 C# 将其转换为 ulong。 所有值都保留,所有位都被使用,没有引入多余的位。
Do not switch to the larger datatype just to accomodate the unsigned value. In C# and likewise for other languages cast the ulong (=unsigned 64 bit) value to the long (=signed 64 bit) and store that as a SQL-Server bigint (=signed 64 bit). On the way back read the bigint as a long and C#-cast it to ulong. All values survive, all bits are used, no excess bits are introduced.