什么是最长的可能的全球电话号码,我应该考虑在SQL varchar(长度)电话

我应该在SQL varchar(length)中为电话考虑的最长的全球电话号码是什么。

注意事项:

  • +表示国家代码
  • ()为区号
  • x + 6个数字用于扩展扩展(因此将其设置为8 {space})
  • 组与组之间的空格(即美式手机+x xxx xxx xxxx = 3个空格)
  • 这就是我需要你们帮助的地方,我希望它是世界性的

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

180503 次浏览

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

我怀疑可能还有其他情况

考虑到varchar(30)和varchar(100)之间没有开销差异,如果你在每个varchar中只存储20个字符,那么谨慎起见,还是设为50吧。

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

在我的经验中,只有一个开/闭括号的例子,这就是我对上面的推理。

假设你不存储'+','()','-',空格和what-have-yous(为什么要存储,它们是表示问题,会根据当地习俗和网络分布而有所不同),ITU-T国际电话网络(大多数国家网络通过该网络连接)的建议E.164指定整个号码(包括国家代码,但不包括拨出所需的国际呼叫字冠等前缀),它因国家而异,也不包括后缀,如PBX分机号)最多为15个字符

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

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

至于“电话号码”;你应该认真考虑“订户号”和“订户号”之间的区别。还有一个“拨号号码”;以及它们可能的格式选项。

用户号码一般在国家号码规划中定义。问题本身通过提到“区号”显示了与国家观点的关系。很多国家都没有。国际电联汇集了世界编号计划的概述,发布了E.164建议,其中发现国家号码最多有12位数字。国际直拨电话(DDD)由1到3位数的国家代码定义,他们增加了多达15位数……没有进行格式化。

拨号号码是另一回事,因为有一些网络元素可以解释电话号码中的扩展值。您可能会想到一个应答机和一个设置呼叫转移参数的号码代码。由于它可能包含另一个订阅者号码,因此它必须明显大于其基值。RFC 4715为“子寻址”预留了20个bcd编码字节。

如果你转向技术限制,那么它会得到更多,因为用户号码在3GPP标准(如GSM)和ISDN标准(如DSS1)中有10 bcd编码字节的技术限制。它们有一个单独的TON/NPI字节用于前缀(数字/数字计划指示器的类型),E.164建议用"+"但是许多号码计划规定最多可以拨4个号码。

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