如何解决 MS SQL 中不受支持的无符号整数字段类型?

Posted

技术标签:

【中文标题】如何解决 MS SQL 中不受支持的无符号整数字段类型?【英文标题】:How to work around unsupported unsigned integer field types in MS SQL? 【发布时间】:2010-09-06 23:30:47 【问题描述】:

试图让基于 mysql 的应用程序支持 MS SQL,我遇到了以下问题:

我将 MySQL 的 auto_increment 保留为无符号整数字段(各种大小),以便利用整个范围,因为我知道永远不会有负值。 MS SQL 不支持所有整数类型的无符号属性,所以我必须在放弃一半值范围或创建一些解决方法之间做出选择。

一种非常幼稚的方法是将一些代码放入数据库抽象代码或存储过程中,以在数据库端的负值和无符号范围的较大部分的值之间进行转换。这当然会打乱排序,而且它也不适用于自动 ID 功能(或者它会以某种方式工作?)。

我现在想不出一个好的解决方法,有吗?还是我只是***,应该忘记大约一半的范围?

编辑: @Mike Woodhouse:是的,我想你是对的。我的脑海中仍然有一个声音说,如果我优化它的利用率,也许我可以减小该字段的大小。但是,如果没有简单的方法可以做到这一点,那可能就不值得担心了。

【问题讨论】:

【参考方案1】:

问题何时可能成为真正的问题?

鉴于当前的增长率,您预计 MS SQL 版本中多久会发生有符号整数溢出?

悲观一点。

您预计应用程序的生命周期是多久?

你还认为2差的因素是你应该担心的吗?

(我不知道答案是什么,但我认为我们应该确定我们确实有问题,然后再更努力地寻找解决方案)

【讨论】:

【参考方案2】:

我建议使用 BIGINT 数据类型,因为它最高可达 9,223,372,036,854,775,807。

SQL Server 不支持有符号和无符号值。

【讨论】:

【参考方案3】:

我会这样说..“我们通常如何处理组件之间的差异?”

封装变化的内容..

您需要在数据访问层中创建一个抽象层,以使其达到不关心数据库是 MySQL 还是 MS SQL..

【讨论】:

以上是关于如何解决 MS SQL 中不受支持的无符号整数字段类型?的主要内容,如果未能解决你的问题,请参考以下文章

在不受支持的 Mac 上,Spotlight 搜索在 MacOS Big Sur 中不起作用

如何使用 enabledRemoteNotificationTypes 更新代码,因为它“在 iOS 8 中不受支持”?

如何阻止我的 Web 应用程序仅在某个浏览器中不受支持? [关闭]

如何在python中将有符号整数转换为无符号整数

Swift中的无符号整数到负整数

C中的无符号整数在java中的处理