为什么顶级数据库平台中没有无符号整数类型?

Ehr*_*ryk 17 postgresql sql-server datatypes

数据库通常是非常可定制的,具有不同的数据类型和自定义长度。

这让我感到惊讶,因为我试图寻找语法来使用unsigned int它们在 PostgreSQL 和 MS SQL Server 中都不可用的类型。MySQL 和 Oracle 似乎都可以。

这对他们来说似乎是一个明显的遗漏 - 下一个最佳性能选项是 long/bigint,(8 字节整数),但可能完全没有必要!有谁知道为什么他们会选择不包含本机 unsigned int 支持?

Ehr*_*ryk 18

微软的 Jim Hogg 对此问题做出了以下回应:

有利有弊。在专业方面,这似乎是避免一些错误的好方法 - 必须检查(有符号的)int 的值 > 0。而且我还敢说,int 的许多用途实际上与无论如何都不应该为负的计数有关. 关于将最大行数加倍的问题?- 是的,但我会说这不那么引人注目。

在缺点方面......在 C 或 C++ 中混合有符号/无符号类型似乎应该足够简单。它不是。它打开了一个难以发现的错误的小陷阱——主要是由于隐式提升/扩大的复杂规则。唉,SQL 已经有了一套更复杂的隐式转换规则。我担心,添加无符号整数会使我们更加困惑。

我会把这个建议记在书上。但是,在我们可以/应该添加的所有功能中,这个功能并没有接近该列表的顶部。

来源:微软连接

我会在专业列表中添加大量内容,并重申他们的 SQL 引擎已经在做比这更复杂的事情,因此他们的团队可以处理增加的复杂性。虽然我不同意他们的总结,但这就是SQL Server 不支持 unsigned types 的原因

Connect 链接最初由Martin Smith在问题评论中发布。

  • “让我们更加困惑” - 可能是指使用 SQL Server 的每个人,而不仅仅是他们自己的开发团队。 (3认同)