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

注意事项:

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

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


当前回答

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

其他回答

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

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

我怀疑可能还有其他情况

Assuming you don't store things like the '+', '()', '-', spaces and what-have-yous (and why would you, they are presentational concerns which would vary based on local customs and the network distributions anyways), the ITU-T recommendation E.164 for the international telephone network (which most national networks are connected via) specifies that the entire number (including country code, but not including prefixes such as the international calling prefix necessary for dialling out, which varies from country to country, nor including suffixes, such as PBX extension numbers) be at most 15 characters.

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

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

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