Sql server 什么';在电话中我应该考虑的最长的世界电话号码 代码> > VARCHAR(长度)< /代码>中,我认为最长的世界电话号码是什么?

Sql server 什么';在电话中我应该考虑的最长的世界电话号码 代码> > VARCHAR(长度)< /代码>中,我认为最长的世界电话号码是什么?,sql-server,validation,database-design,data-modeling,phone-number,Sql Server,Validation,Database Design,Data Modeling,Phone Number,考虑事项: +国家代码 ()表示区号 扩展的x+6个数字(因此设为8{space}) 组之间的空格(即在美国电话中+x xxx xxx xxxx=3个空格) 这就是我需要你帮助的地方,我希望它能遍布全球 考虑到我现在的特殊情况,我不需要卡等。号码以国家代码开始,以分机结束,没有传真/电话等评论,也不需要电话卡之类的东西。更糟糕的是,我使用电话卡打国际电话,所以它在美国的本地号码+帐户(6位)+pin(4位)+“暂停”+你上面描述的 考虑到varchar(30)和varchar(100)之间没

考虑事项:

  • +国家代码
  • ()表示区号
  • 扩展的x+6个数字(因此设为8{space})
  • 组之间的空格(即在美国电话中+x xxx xxx xxxx=3个空格)
  • 这就是我需要你帮助的地方,我希望它能遍布全球

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

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


考虑到varchar(30)和varchar(100)之间没有开销差异,如果每个只存储20个字符,那么我怀疑可能还有其他情况。

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


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

假设您不存储诸如“+”、“()”、“-”、空格以及您拥有的东西(为什么您会这样做,它们是代表性的关注点,根据当地习俗和网络分布情况而有所不同),ITU-T关于国际电话网络(大多数国家网络通过该网络连接)的建议规定,整个号码(包括国家代码,但不包括前缀,如拨号所需的前缀,因国家而异,也不包括后缀,如PBX分机号码)最多15个字符

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

至于后缀,一些PBX支持多达11位的扩展名(同样是)。由于PBX分机号码是一个不同拨号方案的一部分(PBXS与电话公司的交换机是分开的),所以分机号码需要与电话号码区别开来,要么用分隔符,要么把它们存储在一个不同的列中。

< P>至于“电话号码”,你应该真正考虑A之间的区别。“用户号码”和“拨号号码”及其可能的格式选项

用户号码通常在国家编号计划中定义。该问题本身通过提及“区号”显示了与国家视图的关系“这是许多国家所没有的。国际电联汇编了世界编号计划概览,公布了建议E.164,其中国家编号最多为12位。国际直拨电话(DDD)由1到3位的国家代码定义,他们加上最多15位的数字。。。没有格式

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

如果您转向技术限制,那么它会变得更严重,因为在3GPP标准(如GSM)和ISDN标准(如DSS1)中,订户号码在10 bcd编码字节中有技术限制。它们有一个单独的TON/NPI字节作为前缀(数字/数字计划指示器的类型),E.164建议使用“+”写入前缀,但许多数字计划使用最多4个要拨打的数字来定义前缀


<> P>所以如果你想成为未来的证明(和许多软件系统运行不预期的几十年),你需要考虑24位数的用户号码和64位数的拨号号码作为限制…没有格式。添加格式可能会为每个数字大致添加一个额外字符。因此,最后考虑一下,以任何方式限制数据库中的电话号码,并将较短的限制留给用户体验设计师,这可能不是一个好主意。

你说得很对。我在我的消息中添加了几行,请重新阅读:电话卡重拨不应该在数据库中,但是-这是根据拨号规则拨号时添加的部分。存储的号码应该是ISO格式的,没有任何拨号相关信息。仅供参考:那么什么时候会有开销?请在你的答案中包括一个来源,这样我们就可以继续从中学习基本知识。我知道应该是这样,但并不总是这样。例如,在MySQL中,全长用于排序。最好至少少花点力气。两列大小之间没有存储大小的差异。根据您的特定数据库,很可能会有很大或其他开销。例如,SQL Server在预测数据页大小、优化访问和对齐方面丧失了很多能力。和往常一样,测试。过早的优化是万恶之源。陈词滥调的概括更糟糕。设计一个考虑优化的系统本身从来都不是邪恶的——当一个人花费过多的时间去追求不必要的、不明显的和次要的效率时,优化就变成了邪恶