在SQL Server 2005中应使用哪种数据类型存储电话号码?

时间:2020-03-05 18:56:40  来源:igfitidea点击:

我需要将电话号码存储在表格中。请提出我应该使用哪种数据类型?
等待。请在继续阅读之前继续阅读。

由于销售代表可以使用此字段进行搜索(包括通配符搜索),因此需要对该字段进行大量索引。

到目前为止,我们希望电话号码有多种格式(来自XML文件)。是否需要编写解析器以转换为统一格式?可能有数百万的数据(重复的数据),我不想每次通过某些源数据时就占用服务器资源(在诸如预处理等活动中)。

任何建议都欢迎。

更新:我无法控制源数据。只是xml文件的结构是标准的。希望将xml解析保持在最低水平。
一旦进入数据库,检索就应该很快。这里出现的一个疯狂建议是,它甚至应与Ajax AutoComplete功能一起使用(这样,销售代表可以立即看到匹配的功能)。我的天啊!!

解决方案

回答

nvarchar进行了预处理,以尽可能地对其进行标准化。我们可能需要提取扩展并将其存储在另一个字段中。

回答

规范化数据,然后将其存储为varchar。规范化可能很棘手。

那应该是一次性的打击。然后,随着新记录的出现,我们正在将其与规范化数据进行比较。应该非常快。

回答

我可能在这里没有发现明显的地方,但是varchar是否足够长以至于不能满足我们最长的预期电话号码的要求?

如果我缺少明显的东西,如果有人指出它,我会喜欢的。

回答

使用具有长度限制的varchar字段。

回答

我会使用varchar(22)。足够大,可以容纳带分机号的北美电话号码。我们可能希望去除所有讨厌的'(',')','-'字符,或者将它们全部解析为一种统一格式。

亚历克斯

回答

如果仅存储美国电话号码,请使用CHAR(10)。删除除数字外的所有内容。

回答

SQL Server 2005对索引的varchar字段中的文本的子字符串查询进行了很好的优化。 2005年,他们在索引字段的字符串摘要中引入了新的统计信息。这对于全文搜索有很大帮助。

回答

这是否包括:

  • 国际号码?
  • 扩展程序?
  • 除了实际数字以外的其他信息(例如"问鲍比")?

如果所有这些都不是,我将使用10个字符的字段并去除所有非数字数据。如果第一个为是,其他两个为否,则我将使用两个varchar(50)字段,一个用于原始输入,一个将所有非数字数据划分为条带并用于索引。如果2或者3是,我想我会做两个字段和某种疯狂的解析器来确定什么是扩展或者其他数据并适当地处理它。当然,我们可以通过在创建索引时去除多余字符的索引来避免使用第二列,但是我只想做第二列,并可能使用触发器来去除字符。

更新:为了解决AJAX问题,它可能没有我们想象的那么糟糕。如果实际上这是对表执行任何操作的主要方式,请按照我所说的那样仅将数字存储在第二列中,然后将该列的索引聚为一组。

回答

我们使用varchar(15)并在该字段上肯定使用索引。

原因是国际标准最多可以支持15位数字

维基百科电话号码格式

如果我们确实支持国际号码,建议我们单独存储世界区号或者国家/地区代码,以更好地过滤查询,以免我们自行解析和检查电话号码字段的长度以限制返回美国的电话例子

回答

由于我们需要适应许多不同的电话号码格式(可能包括分机号等),因此像对待其他varchar一样对待它可能是最有意义的。如果我们可以控制输入,则可以采取多种方法来使数据更有用,但事实并非如此。

一旦决定简单地将其视为任何其他字符串,我们就可以集中精力克服不可避免的问题,包括不良数据,神秘的电话号码格式以及其他任何会弹出的问题。挑战将在于为数据建立良好的搜索策略,而不是我认为如何存储数据。必须处理我们无法控制的大量数据,这始终是一项艰巨的任务。

回答

使用SSIS提取和处理信息。这样,我们就可以处理与SQL Server分离的XML文件。如果需要,我们还可以在单​​独的服务器上执行SSIS转换。使用VARCHAR以标准格式存储电话号码。 NVARCHAR是不必要的,因为我们正在谈论数字,也许还有其他几个字符,例如'+','','(',')'和'-'。