什么数据types应该用于在SQL Server 2005中存储电话号码?
我需要将电话号码存储在一个表格中。 请build议使用哪种数据types? 等待。 请在回复之前阅读
这个字段需要大量索引,因为销售代表可以使用这个字段进行search(包括通配符search)。
到目前为止,我们正在期待电话号码有多种格式(来自XML文件)。 我是否必须编写一个parsing器来转换为统一的格式? 可能有数百万的数据(重复),我不想捆绑服务器资源(像预处理太多的活动),每次有一些源数据通过..
任何build议,欢迎..
更新: 我无法控制源数据。 只是XML文件的结构是标准的。 希望保持XMLparsing到最低限度。 一旦它在数据库中,检索应该是快速的。 一个疯狂的build议是,它甚至可以使用Ajax AutoCompletefunction(所以Sales Reps可以立即看到匹配的)。 我的天啊!!
这包括:
- 国际号码?
- 扩展?
- 除了实际数量之外的其他信息(如“请求bobby”)?
如果所有这些都不是,我会使用一个10个字符的字段,并删除所有的非数字数据。 如果第一个是肯定的,另外两个是否定的,我会使用两个varchar(50)字段,一个用于原始input,另一个用所有非数字数据进行条带化并用于索引。 如果2或3是,我想我会做两个领域和某种疯狂的parsing器,以确定什么是扩展或其他数据,并妥善处理。 当然你可以通过索引来避开第二列,在创build索引的时候删除多余的字符,但是我只是做第二列,可能用触发器去除字符。
更新:为了解决AJAX问题,它可能不会像你想象的那么糟糕。 如果这实际上是对表格执行任何操作的主要方式,那么就像我刚才所说的那样,只将辅助列中的数字存储起来,然后使该列的索引成为一个簇。
我们使用varchar(15)和当然索引。
原因是国际标准可以支持15位数字
维基百科 – 电话号码格式
如果您确实支持国际号码,build议单独存储世界区号或国家/地区代码,以便更好地过滤查询,以便您不会发现自己parsing并检查电话号码字段的长度,以便将返回的电话限制在美国例
我会使用一个varchar(22)。 大到足以容纳一个北美电话号码与扩展名。 你会想要去除所有讨厌的(',')',' – '字符,或者把它们全部parsing成一个统一的格式。
亚历克斯
如果您仅存储美国电话号码,请使用CHAR(10)。 删除一切,但数字。
我可能在这里错过了明显的,但不会足够长的时间足够长的预期的最长的电话号码工作良好?
如果我错过了一些显而易见的东西,如果有人指出,我会喜欢的。
SQL Server 2005对索引varchar字段中的文本的子string查询进行了很好的优化。 在2005年,他们为索引字段的string摘要引入了新的统计数据。 这有助于显着全文search。
使用varchar是相当低效的。 使用金钱types,并创build一个用户声明types“phonenumber”,并创build一个规则,只允许正数。
如果你声明为(19,4),你甚至可以存储一个4位数的扩展名,并且对于国际号码来说足够大,只需要9个字节的存储空间。 另外,索引也很快。
nvarchar与预处理,以尽可能标准化他们。 您可能需要提取扩展名并将其存储在另一个字段中。
规范化数据,然后存储为一个varchar。 正常化可能会很棘手。
这应该是一次性的打击。 然后,随着新logging的进入,您将其与归一化的数据进行比较。 应该很快。
由于您需要适应许多不同的电话号码格式(可能包括诸如扩展名等),因此您可以像处理其他任何varchar一样对待它。 如果你可以控制input,你可以采取一些方法来使数据更有用,但不是这样。
一旦你决定简单地把它当作任何其他string,你可以专注于克服不良资料,神秘的电话号码格式和其他任何会popup的不可避免的问题。 挑战将是build立一个好的数据search策略,而不是如何存储在我看来。 处理大量无法控制收集的数据总是一项艰巨的任务。
使用SSIS来提取和处理信息。 这样你就可以处理从SQL Server中分离出来的XML文件。 如果需要,也可以在单独的服务器上执行SSIS转换。 使用VARCHAR以标准格式存储电话号码。 因为我们正在谈论数字,也许还有其他几个字符,比如“+”,“”,“(',')”和“ – ”,所以NVARCHAR就没有必要了。
使用长度限制的varchar
字段。
使用“x”或“ext”表示扩展名是相当常见的,所以允许15个字符(用于全部国际支持)加上3(用于“ext”)加上4(用于扩展本身),总共22个字符。 这应该让你安全。
或者,对input进行归一化处理,以便将任何“ext”转换为“x”,最多可以input20。
我意识到这个线程是旧的,但值得一提的是存储为一个数字types的格式化,特别是在.NET框架中的优势。
IE
.DefaultCellStyle.Format = "(###)###-####" 'Will not work on a string
为电话号码等多重属性设置单独的表格总是更好。
由于您无法控制源数据,所以您可以parsingXML文件中的数据并将其转换为适当的格式,以便不会对某个特定国家/地区的格式造成任何问题,并将其存储在单独的表中,以便索引和检索两个将是有效的 。
谢谢。