Shi*_*mmy 187 sql-server validation database-design data-modeling phone-number
什么是我在SQL varchar(length)手机中应该考虑的最长的全球电话号码.
注意事项:
考虑到现在我的特殊情况,我不需要卡等.号码以国家代码开头,以扩展名结尾,没有传真/电话等评论,也不需要电话卡.
Mat*_*ght 156
假设你没有存储像'+','()',' - ',空格和你有什么的东西(为什么你会这些,它们是表现性的问题,根据当地习俗和网络分布而有所不同(无论如何),国际电话网络(大多数国家网络通过其连接)的ITU-T建议E.164规定了整个号码(包括国家代码,但不包括拨出所需的国际呼叫前缀等前缀,因国家/地区而异,也不包括后缀,如PBX分机号码,最多15个字符.
呼叫前缀取决于呼叫者,而不是被呼叫者,因此不应(在许多情况下)存储电话号码.如果数据库存储个人地址簿的数据(在这种情况下存储国际呼叫前缀是有意义的),在芬兰,您必须处理的最长国际前缀(根据维基百科)目前是5位数.
至于后缀,一些PBX支持多达11位数的扩展(同样,根据维基百科).由于PBX分机号码是不同拨号方案的一部分(PBX与电话公司的交换机是分开的),因此分机号码需要与电话号码区分开来,可以使用分隔符或将它们存储在不同的列中.
cle*_*tus 72
好吧,考虑到varchar(30)和varchar(100)之间没有开销差异,如果你每个只存储20个字符,那么谨慎一点,只需要50.
Kev*_*imm 17
在GSM规范3GPP TS 11.11中,在MSISDN EF(6F40)中为"拨号号码"留出了10个字节.由于这是电话号码的GSM表示,并且它的使用是半字节交换,(并且总是有括号的可能性)22个字符的数据应该是充足的.
根据我的经验,只有一个开/闭括号的例子,这是我对上述原因的推理.
web*_*ber 10
这有点糟糕,我使用国际电话的电话卡,所以它在美国的本地号码+帐号#(6位)+ pin(4位)+"暂停"+你上面描述的.
我怀疑可能还有其他情况
至于“电话号码”,您应该真正考虑“订户号码”和“拨号号码”之间的区别以及它们可能的格式选项。
用户号码通常在国家编号计划中定义。这个问题本身通过提及许多国家没有的“区号”来表明与国家观点的关系。国际电联汇总了世界编号计划并发布了建议 E.164,其中发现国家编号最多有 12 位数字。对于由 1 到 3 位数字的国家/地区代码定义的国际直拨电话 (DDD),他们添加了最多 15 位数字......而无需格式化。
拨号号码是另一回事,因为有网络元素可以解释电话号码中的额外值。您可能会想到应答机和设置呼叫转移参数的号码代码。由于它可能包含另一个订户号码,因此它必须明显长于其基值。RFC 4715 预留了 20 个 bcd 编码字节用于“子寻址”。
如果您转向技术限制,那么情况会变得更加严重,因为在 3GPP 标准(如 GSM)和 ISDN 标准(如 DSS1)中,订户号码在 10 个 bcd 编码字节内有技术限制。它们有一个单独的 TON/NPI 字节作为前缀(号码类型/号码计划指示符),E.164 建议使用“+”编写,但许多号码计划将其定义为最多可拨打 4 个号码。
因此,如果您想面向未来(许多软件系统会意外地运行几十年),您需要考虑订阅者号码的 24 位数字和拨号号码的 64 位数字作为限制……而无需格式化。添加格式可能会为每个数字添加大约一个额外的字符。因此,最后的想法是,以任何方式限制数据库中的电话号码并为用户体验设计师留下较短的限制可能不是一个好主意。
| 归档时间: |
|
| 查看次数: |
131609 次 |
| 最近记录: |