gpt4 book ai didi

database - 是否有在数据库中存储规范化电话号码的标准?

转载 作者:太空狗 更新时间:2023-10-30 01:37:14 25 4
gpt4 key购买 nike

在数据库字段中存储电话号码的良好数据结构是什么?我正在寻找足够灵活以处理国际号码的东西,以及允许高效查询号码的各个部分的东西。

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

where dbo.f_normalizenum(num1) = dbo.f_normalizenum(num2)

效率极低。当它只是一个 varchar 字段时,查找区号之类的查询也会变得非常棘手。

[编辑]

大家在这里提出了很多好的建议,谢谢!作为更新,这就是我现在正在做的事情:我仍然在 varchar 字段中完全按照输入的方式存储数字,但是我没有在查询时对事物进行规范化,而是有一个触发器可以在插入记录时完成所有工作或更新。因此,对于我需要查询的任何部分,我都有 int 或 bigints,并且对这些字段进行了索引以使查询运行得更快。

最佳答案

首先,除了国家代码之外,没有真正的标准。您最多只能通过国家代码识别特定电话号码属于哪个国家,并根据该国家的格式处理号码的其余部分。

但是,一般来说,电话设备等都是标准化的,因此您几乎总是可以将给定的电话号码分成以下部分

  • C 国家/地区代码 1-10 位数字(目前为 4 位或更少,但可能会更改)
  • 区域代码(省/州/地区)代码 0-10 位(实际上可能需要一个区域字段和一个区域字段,而不是一个区域代码)
  • E 交换(前缀或开关)代码 0-10 位数字
  • L 行号 1-10 位

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

此外,每个国家内部都有不同的标准。在美国,您始终可以依赖 (AAA) EEE-LLLL,但在另一个国家/地区,您可能在城市 (AAA) EE-LLL 有交易所,在农村地区 (AAA) LLLL 可能只有行号。您将不得不从某种形式的树的顶部开始,并根据您获得的信息对其进行格式化。例如,国家代码 0 对于数字的其余部分具有已知格式,但对于国家代码 5432,您可能需要先检查区号才能理解数字的其余部分。

您可能还想处理 vanity 号码,例如 (800) Lucky-Guy,这需要认识到,如果它是美国号码,则数字太多(出于广告或其他目的,您可能需要完整表示)并且在美国,字母映射到数字的方式与德国不同。

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

关于database - 是否有在数据库中存储规范化电话号码的标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com