【发布时间】:2011-09-28 03:38:03
【问题描述】:
我们正在尝试实施以下案例。我们有一个发票表,并且有一列包含电子邮件地址。我们希望以某种方式从该电子邮件地址生成一个唯一的 int 值并将其存储在单独的列中。这将用作 FK 并被索引。所以我正在寻找的是一种从字符串生成整数的算法(请注意,电子邮件字符串应始终输出相同的整数,因此每个电子邮件地址都作为唯一的整数表示)。我们也可以使用 bigint
【问题讨论】:
-
这已经被问过很多次了,简短的回答是不可能取一个无限(或相对无限)域(字符串/varchar)并将其与有限域(int , 大整数)。您需要在唯一性或输出数据类型上做出妥协。我的建议是您只需索引电子邮件地址本身。
-
我不明白为什么会这样,@MarkPeters。他们得到的任何字符串都将被编码为有限的字节数。只需将相同的字节解释为 bigint,瞧,你就有了一个数字。
-
@Tom:我不确定 bigint 的确切语义。在 Java 中,BigInteger 具有可变位长,因此可以正常工作(我已经按照这些行删除了答案)。我的印象是 SQL 上下文中的 bigint 仍然是有界的(64 位),因此它代表一个有限域。
-
我认为@MarkPeters 的意思是可能的电子邮件地址的数量总是> 给定长度的整数的数量。例如,如果使用 64 位整数,则有 2^64 个可能的值。有无限多个可能的电子邮件地址,> 2^64。
-
@TomZych 如果你有一个定义精度的整数类型(例如 32 位),生成 2**32 + 1 个不同的电子邮件地址是微不足道的,你的唯一性就在那里。跨度>
标签: algorithm