首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数据库中存储标准化电话号码是否有标准?

在数据库中存储标准化电话号码是否有标准?
EN

Stack Overflow用户
提问于 2008-09-03 15:22:34
回答 18查看 60K关注 0票数 98

在数据库字段中存储电话号码的好数据结构是什么?我正在寻找一个足够灵活的东西,可以处理国际号码,也可以让号码的不同部分被有效地查询。

varchar编辑:只是为了在这里澄清用例:我目前将数字存储在单个字段中,并且我将它们留在客户输入的位置。然后,当代码需要这个数字时,我会对其进行规范化。问题是,如果我想查询几百万行来查找匹配的电话号码,它涉及一个函数,比如

代码语言:javascript
复制
where dbo.f_normalizenum(num1) = dbo.f_normalizenum(num2)

这是非常低效的。此外,当只有一个varchar字段时,查找区号之类的内容的查询也会变得非常棘手。

编辑

大家在这里提出了很多好的建议,谢谢!作为更新,我现在要做的是:我仍然在varchar字段中存储输入的数字,但不是在查询时规范化,而是在插入或更新记录时使用触发器来完成所有工作。因此,我对需要查询的任何部分都有int或bigint,并对这些字段进行索引以使查询运行得更快。

EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2008-09-03 15:54:44

首先,除了国家代码之外,没有真正的标准。你能做的最好的事情就是通过国家代码来识别一个特定的电话号码属于哪个国家,然后根据这个国家的格式来处理剩下的号码。

但是,电话设备等通常是标准化的,因此您几乎总是可以将给定的电话号码分成以下几个部分

  • C国家/地区代码1-10位(目前为4位或更少,但可能会发生变化)
  • A区号(省/州/地区)代码0-10位(实际上可能需要一个地区字段和一个区域字段,而不是一个区号)
  • E交换(前缀或交换机)代码0-10位
  • L线路号1-10位

<代码>F29

使用此方法,您可以潜在地分隔号码,例如,您可以找到可能彼此接近的人,因为他们具有相同的国家、地区和交换代码。有了手机,这就不再是你可以指望的东西了。

此外,每个国家都有不同的标准。在美国,您可以始终依赖(AAA) EEE-LLLL,但在另一个国家,您可以在城市(AAA) EE-LLL中交换,而在农村(AAA) LLLL中简单地使用线号。您必须从某种形式的树的顶部开始,并根据您拥有的信息对它们进行格式化。例如,国家代码0的其余部分具有已知的格式,但对于国家代码5432,您可能需要先检查区号,然后才能了解其余数字。

您可能还希望处理像(800) Lucky-Guy这样的vanity数字,这需要认识到,如果是美国数字,就会有多一个数字(为了广告或其他目的,您可能需要完整的表示形式),而且在美国,字母与数字的映射方式与在德国不同。

您可能还希望将整个数字单独存储为文本字段(具有国际化),以便以后可以返回并在情况发生变化时重新解析数字,或者作为备份,以防有人提交了错误的方法来解析特定国家的格式并丢失信息。

票数 82
EN

Stack Overflow用户

发布于 2008-09-03 15:32:31

KISS -我已经厌倦了很多美国的网站。他们有一些巧妙编写的代码来验证邮政编码和电话号码。当我输入我完美有效的挪威联系信息时,我发现它经常被拒绝。

保留一个字符串,除非您有一些更高级的特定需求。

票数 58
EN

Stack Overflow用户

发布于 2008-10-04 19:32:04

Wikipedia page on E.164应该会告诉你你需要知道的一切。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档