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

时间:2020-03-05 18:43:42  来源:igfitidea点击:

为了使基于MySQL的应用程序支持MS SQL,我遇到了以下问题:

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

一种非常幼稚的方法是将一些代码放入数据库抽象代码或者存储过程中,该代码在db侧的负值与来自无符号范围较大部分的值之间进行转换。当然,这会搞乱排序,并且也无法与自动ID功能配合使用(或者会以某种方式使用吗?)。

我现在想不出一个好的解决方法,有吗?还是我只是在狂热,应该只忘掉一半的射程?

编辑:
@Mike Woodhouse:是的,我想你是对的。我的头上仍然有声音说,如果我优化该领域的利用,也许可以缩小该领域的规模。但是,如果没有简单的方法可以做到这一点,那就不用担心了。

解决方案

回答

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

封装各种内容。

我们需要在数据访问层中创建一个抽象层,以使其到不在乎数据库是MySQL还是MS SQL的地步。

回答

问题何时会成为真正的问题?

在当前的增长率下,我们预计MS SQL版本在多长时间内会发生有符号整数溢出?

悲观。

我们希望该应用程序存活多长时间?

我们是否仍然认为2差异的因素是我们应该担心的事情?

(我不知道答案是什么,但是我认为我们应该确定在遇到任何困难之前,我们确实有问题)

回答

我建议使用BIGINT数据类型,因为这会增加到9,223,372,036,854,775,807.

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