为什么最好将电话号码存储为字符串与整数?

use*_*101 45 ruby postgresql ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

正如问题所述,为什么在电话号码栏中将电话号码存储为字符串而不是整数是最佳做法?

我不确定我理解这个的理由.请帮忙澄清一下!

谢谢!

Nei*_*ter 84

电话号码是数字字符串,它们不是整数.

考虑例如:

  • 在不同的基础上表达电话号码会使其变得毫无意义

  • 将两个电话号码相加或相乘,或者对电话号码进行任何数学运算都是没有意义的.结果不是另一个电话号码(除了字幕)

  • 电话号码旨在"按原样"输入到连接的设备中.

  • 电话号码可能有前导零.

  • 操作电话号码(例如添加区号)是字符串操作.

存储电话号码的字符串版本使其清晰明确.


历史:在旧的脉冲编码拨号系统中,电话号码中每个数字的代码被发送为与数字相同的脉冲数(或10个脉冲为"0").这可能就是为什么我们仍然使用数字来表示电话号码的部分.见http://en.wikipedia.org/wiki/Pulse_dialing

  • 很好的答案尼尔!@Pavan 请注意您在互联网上的要求! (2认同)
  • @stevec:这部分取决于你,我认为这是一个不同的问题。对于大多数用例,如果重要的话,我个人会使用单个字段和一个可以解析数字以分离出拨号代码等的库,因为我不想将这一要求要求系统用户放置正确的部分进入多字段版本中的右侧框。然而,在某些用例中,在输入或存储数字时分成逻辑组件可能会很方便。 (2认同)

eli*_*ide 8

尼尔斯莱特说的是正确的.我想补充说,有很多边缘情况你不能将电话号码一致地​​表示为数字值.

例如,考虑以下数字:

011-123-555-1212
+11-123-555-1212
+1 (112) 355-5121 x2
Run Code Online (Sandbox Code Playgroud)

这些都是可能有效的电话号码,但它们意味着非常不同的东西.然而,整数形式,它们都是111235551212.


小智 6

如果要从输入中存储显示的数字,则必须使用字符串.

然而,虽然确实不能对具有意义的数字执行数学运算.使用哈希集中的数字和索引比使用字符串更快.因此,如果您可以保证或统一您的数字集,因此它们都是一致的,那么您可能会看到更好的性能.

例如,在Telco世界中,给定客户的评级调用包括在他们的CLI上进行大量搜索,在这种情况下,按整数搜索更快,更便宜.但是总的来说字符串将被罚款性能明智的,它只是在性能问题,你有多个搜索到一个巨大的数字的范围内进行 - 即评级在2个百万行和2000年关税2.5亿电话.在内存中评级也变得昂贵,因此在处理这些卷时能够使用64位int或uint更便宜.


Pav*_*van 5

例如考虑这些电话号码

099-1234-56789+91-8907-687665

在这种情况下,如果phone_number属性的类型的integer,那么它就不能接受这些values.It应该是string持有这些类型values.So的string总是比首选integer