Mysql 用整型数据类型表示数据库中的无限

Mysql 用整型数据类型表示数据库中的无限,mysql,types,Mysql,Types,我有一个表,可以保存一些帐户限制,如用户。对于大多数行,此值将是整数。但是,我还需要支持将unlimited(无限)存储为值。这可能看起来很愚蠢,但是否存在表示无限(无限)的通用整数值?我希望继续将值存储为整数。 使用零 使用-1 使用空值 我更喜欢null,除非该字段不可为null,然后我更喜欢zero,除非zero是一个有效限制,然后我更喜欢-1,除非-1是一个有效值,在这种情况下,您需要另一个字段(比如一个位字段)来表示“unlimited”。如果您从.NET访问数据库,整数类型具有常量

我有一个表,可以保存一些帐户限制,如用户。对于大多数行,此值将是整数。但是,我还需要支持将unlimited(无限)存储为值。这可能看起来很愚蠢,但是否存在表示无限(无限)的通用整数值?我希望继续将值存储为整数。

  • 使用零
  • 使用-1
  • 使用空值

我更喜欢null,除非该字段不可为null,然后我更喜欢zero,除非zero是一个有效限制,然后我更喜欢-1,除非-1是一个有效值,在这种情况下,您需要另一个字段(比如一个位字段)来表示“unlimited”。

如果您从.NET访问数据库,整数类型具有常量成员MaxValue和MinValue。我们有时用它们来表示无限。当然,这些值在RDBMS中没有特殊意义

作为一个整数,无穷大将是困难的。有几个选择:

1) -1,对应的程序逻辑将其视为无限(并假设负值实际上无效)


2) 一个额外的列,上面有一个标志,表示有限/无限。

你不可能拥有无限多的帐户,因为没有无限多的人。事实上,您可以拥有的帐户数量是有限的(如果您选择将值存储在单个数据库列中),因为任何可数事物的有限存储机制都是有限的。对于@Tor Haugen,我建议最好的方法是使用系统施加的限制(无论您的语言提供的最大整数或长度是多少)。这样,你就不必为你的比较担心任何特殊情况。此外,我将使用数据库约束来防止在字段中存储负值。一个64位整数肯定会包含一个足够大的数字,对于您的应用程序来说几乎是无限的。

我认为没有完美的解决方案。因此,我的建议如下:

<创建表示存储在数据库中的最大值的常数,并将其视为“无穷大”。


限制将是一个整数。在什么范围内?肯定?如果你真的需要扩展这个概念(你可能不需要),你可以创建一个枚举,这样任何特殊值的意义对于任何人来说都是显而易见的。零和-1是整数集的成员。并且null(无数据)可能已经是有效值。重新定义众所周知的价值观,使其具有新的特殊含义,这是令人困惑的,而且通常是不明智的。不,这是有道理的。显然,他所说的正常范围不是整数集,而是非负整数集。因为您显然不能设置-1个用户的限制,所以很明显它有一个特殊的值。很多编程语言中也使用了这种方法。@[fixme.myopenid.com]:同意,但我猜在这种情况下,不会使用整数值的完整范围,因为我们讨论的是帐户限制。在这种情况下,您需要一个sentinel值(),这很好。只要记录在案!除非另有充分理由,否则我更喜欢“额外字段”解决方案。“神奇价值”解决方案可能会导致各种意想不到的问题。我不是说它不常见,只是说它有点定时炸弹在滴答作响。@namxal:如果你不与限制进行比较,你可以直接检查特殊情况下的“无限”值(0或-1,甚至是空值,你可以选择)首先“重新定义已知值以具有新的特殊含义是令人困惑的,通常是不明智的”你的意思是,比如重新定义MinValue和MaxValue?哈哈!;-)我认为这意味着MaxValue实际上是一个实际的极限,所以为什么不使用它呢?我也在考虑这样做,但现在是2016年,我们还有更好的吗:D