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

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

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

我想不出 好的 现在有解决办法吗?或者我只是太狂热了,应该忘记一半的范围?

编辑:
@迈克伍德豪斯:是的,我想你是对的。我脑子里仍然有一个声音说,如果我优化它的利用率,也许我可以缩小该字段的大小。但如果没有简单的方法可以做到这一点,那么可能就不值得担心。

有帮助吗?

解决方案

这个问题什么时候可能成为真正的问题?

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

保持悲观。

您预计应用程序的生命周期有多长?

您仍然认为 2 的差异是您应该担心的事情吗?

(我不知道答案是什么,但我认为我们应该在更加努力地寻找解决方案之前确保我们确实存在问题)

其他提示

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

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

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

封装不同的内容..

您需要在数据访问层中创建一个抽象层,以使其达到以下目的: 不在乎 无论数据库是 MySQL 还是 MS SQL..

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top