3

为什么在数据库中使用数字作为 ID(想想主键 + AI)并且几乎无处不在而不是字母?有 10 个数字可用,而英文字母表有多达 26 个字母。

假设每个字母/数字都有一个位置。98需要两个点,1202需要四个点,依此类推。在四个点中,您最多可以存储 10 000 个 ID,但如果使用字母代替,则可以存储多达 456 976 个具有相同点数的 ID。如果您使用区分大小写,则更是如此。这几乎是 50 倍。

我确实意识到这对普通用户来说很可能无关紧要,但为什么大型数据库不使用字母而不是数字作为 ID?

4

4 回答 4

4

您混淆了数字值的字符。

使用整数(例如 32 位整数)作为数据类型的 ID 列行仅占用 4 个字节。它也将是内存中的本机值,并且可以在 CPU 中本机执行(作为二进制表示)。

这对于字符来说是不一样的——即使假设使用了 ASCII(8 位),当你超过 4 个字符时,你正在使用更多的空间。您还需要在值之间进行转换,以便进行有效的比较。

于 2012-07-11T18:51:48.297 回答
2

数字包装更好。您假设因为数字以十进制显示,所以它们存储为十进制,但它们实际上是二进制的。针对计算机进行了优化:)。

如果要表示 26 个字母之一,则需要 2个 5二进制数字。每个 5 位块丢失 32-26=8 个可能的数字。

于 2012-07-11T18:51:48.403 回答
1

没有硬性规定不能在数据库中使用字母数字字段作为 ID。人们总是这样做。

至于为什么使用数字更常见......

  • 大多数数据库系统的设计都具有数字的自动递增能力。(是的,我知道,这是一个鸡/蛋场景)
  • 数字可以/通常确实占用更少的存储字节。(是的,您可以存储大量数字和较短的字符串来克服这个问题,但作为一般规则......)
    • 我打算对此进行扩展,但其他人都以准确描述存储 int 与 varchar 所需的字节之间的差异来击败我。现在添加它会很愚蠢。;-)
  • 在我使用过的每个系统上,数字排序都不同于字符串排序:
    • 值 1、12、3、2、20 按数字排序为 1、2、3、12、20,但按字母数字排序时:1、12、2、20、3
  • 需要更多的计算能力来克服前一点,因此数字的使用效率更高。
    • 这就是为什么大多数数据库都设计为使用自动递增数字而不是第一个项目符号中的自动递增字符串的答案。不管是鸡还是蛋,我都交给你了。
于 2012-07-11T18:52:40.543 回答
0

因为计算机只能处理数字。甚至字符也被计算机视为数字。

此外,使用字符串的效率远低于数字。

任何小于 4,294,967,296 (2^32) 的数字只能存储在 4 个字节中,而即使是5 个字符(每个字符占用一个字节)的字母字符串也只允许 11,881,376 种可能性。

计算机不会在一个字节中记录一个以 10 为基数的数字。每个字节实际上可以保存 256 个不同的可能值。

于 2012-07-11T18:50:58.450 回答