为什么数字用作识别而不是字母?

时间:2012-07-11 18:47:39

标签: database structure

为什么数字在数据库中被用作ID(想想主键+ AI)而且几乎到处都是字母而不是字母? 有10位数字,而英文字母有26位字母。

假设每个字母/数字都有一个位置。 98 需要两个点,而 1202 需要四个等等。在四个点中,您可以存储多达10 000个ID,但如果您使用字母代替,则可以存储尽可能多的ID具有相同数量的斑点的456 976个ID。如果你使用区分大小写,甚至更多。 这差不多50倍。

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

4 个答案:

答案 0 :(得分:4)

您为数字值混淆了字符。

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

没有严格的规则说你不能在数据库中使用字母数字文件作为ID。人们一直这样做。

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

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

答案 3 :(得分:0)

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

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

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

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