1

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

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

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

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

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

4

3 回答 3

1

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

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

悲观一点。

您希望应用程序存在多长时间?

你仍然认为2差异的因素是你应该担心的吗?

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

于 2008-08-27T09:39:12.323 回答
1

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

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

于 2008-09-03T06:49:20.977 回答
0

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

封装变化的东西..

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

于 2008-08-27T08:00:20.563 回答