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

考虑因素:

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

考虑到我现在的具体情况,我不需要卡片等。号码以国家/地区代码开头,以分机号结尾,无传真/电话等。评论,也不需要名片的东西。

有帮助吗?

解决方案

考虑到如果您只在 varchar(30) 和 varchar(100) 中存储 20 个字符,则 varchar(30) 和 varchar(100) 之间没有开销差异,谨慎起见,将其设置为 50。

其他提示

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

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

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

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

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

更糟糕的是,我使用电话卡拨打国际长途,所以它是美国本地号码+帐户#(6位数字)+密码(4位数字)+“暂停”+您上面描述的内容。

我怀疑可能还有其他情况

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top