226

我应该在电话的 SQLvarchar(length)中考虑最长的全球电话号码是多少。

考虑因素:

  • + 国家代码
  • () 代表区号
  • x + 6 个数字用于扩展扩展名(所以将其设为 8 {space})
  • 组之间的空格(即在美国电话中 +x xxx xxx xxxx = 3 个空格)
  • 这是我需要你帮助的地方,我希望它在全球范围内

考虑到现在在我的特殊情况下,我不需要卡等号码以国家代码开头并以分机号结尾,不需要传真/电话等评论,也不需要电话卡的东西。

4

5 回答 5

187

假设您不存储诸如“+”、“()”、“-”、空格和你有什么(为什么会这样,它们是表示问题,会因当地习俗和网络分布而异)无论如何),国际电话网络(大多数国家网络通过该网络连接)的 ITU-T 建议E.164指定整个号码(包括国家代码,但不包括前缀,例如拨出所需的国际呼叫前缀,因国家/地区而异,不包括后缀,例如 PBX 分机号码)最多15 个字符

呼叫前缀取决于呼叫者,而不是被呼叫者,因此(在许多情况下)不应与电话号码一起存储。如果数据库存储个人通讯录的数据(在这种情况下存储国际电话前缀是有意义的),那么在芬兰,您必须处理的最长的国际前缀(根据维基百科)目前是 5 位数字。

至于后缀,一些 PBX 最多支持 11 位扩展名(同样,根据 Wikipedia)。由于 PBX 分机号码是不同拨号计划的一部分(PBX 与电话公司的交换机分开),因此分机号码需要与电话号码区分开来,可以使用分隔符,也可以将它们存储在不同的列中。

于 2011-01-18T21:26:50.013 回答
94

好吧,考虑到 varchar(30) 和 varchar(100) 之间没有开销差异,如果您只在每个字符中存储 20 个字符,请谨慎行事,只需将其设为 50。

于 2009-04-06T23:13:25.600 回答
18

在 GSM 规范3GPP TS 11.11中,在 MSISDN EF (6F40) 中留出了 10 个字节用于“拨号号码”。由于这是电话号码的 GSM 表示,并且它的用法是半字节交换的,(并且总是有括号的可能性)22 个字符的数据应该足够了。

根据我的经验,只有一个开/关括号的实例,这就是我对上述内容的推理。

于 2009-04-07T00:47:03.800 回答
11

更糟糕的是,我使用电话卡拨打国际电话,所以它在美国的本地号码 + 帐号(6 位)+ 密码(4 位)+“暂停”+ 你上面描述的。

我怀疑可能还有其他情况

于 2009-04-06T23:11:05.853 回答
4

至于“电话号码”,您应该真正考虑“订户号码”和“拨号号码”之间的区别以及它们可能的格式选项。

用户号码通常在国家编号方案中定义。这个问题本身通过提到许多国家没有的“区号”来表明与国家观点的关系。国际电联汇总了发布建议 E.164 的全球编号计划概览,其中发现国家号码最多为 12 位数字。使用由 1 到 3 位数的国家代码定义的国际直接长途电话 (DDD),他们添加了最多 15 位数字......没有格式化。

The dialling number is a different thing as there are network elements that can interpret exta values in a phone number. You may think of an answering machine and a number code that sets the call diversion parameters. As it may contain another subscriber number it must be obviously longer than its base value. RFC 4715 has set aside 20 bcd-encoded bytes for "subaddressing".

If you turn to the technical limitation then it gets even more as the subscriber number has a technical limit in the 10 bcd-encoded bytes in the 3GPP standards (like GSM) and ISDN standards (like DSS1). They have a seperate TON/NPI byte for the prefix (type of number / number plan indicator) which E.164 recommends to be written with a "+" but many number plans define it with up to 4 numbers to be dialled.

因此,如果您想成为未来的证明(并且许多软件系统出乎意料地运行了几十年),您将需要考虑 24 位用户号码和 64 位拨号号码作为限制......没有格式化。添加格式可能会为每个数字添加大约一个额外的字符。因此,作为最后的想法,以任何方式限制数据库中的电话号码并给用户体验设计师留下更短的限制可能不是一个好主意。

于 2020-08-23T10:48:48.307 回答