Quel type de données faut-il utiliser pour stocker les numéros de téléphone dans SQL Server 2005?

j'ai besoin de stocker les numéros de téléphone dans une table. Veuillez suggérer le type de données que je devrais utiliser? attendez. Veuillez la lire avant de vous frappez la réponse..

ce champ doit être fortement indexé car les représentants des ventes peuvent utiliser ce champ pour la recherche (y compris la recherche de caractères sauvages).

à l'heure actuelle, nous nous attendons à ce que les numéros de téléphone soient disponibles dans un certain nombre de formats (à partir d'un fichier XML). Dois-je écrire un analyseur à convertir en uniforme format? Il pourrait y avoir des millions de données (avec des doublons) et je ne veux pas bloquer les ressources du serveur (dans les activités comme le prétraitement trop) à chaque fois que certaines données de source passe par..

toute suggestion est la bienvenue..

mise à Jour: je n'ai pas de contrôle sur la source de données. Juste que la structure du fichier xml est standard. Aimerait garder l'analyse xml à un minimum. Une fois qu'il est dans la base de données, la récupération devrait être rapide. Un fou la suggestion qui se passe ici est qu'il devrait même fonctionner avec la fonctionnalité AutoComplete Ajax (pour que les représentants des ventes peuvent voir les correspondants immédiatement). OMG!!

64
demandé sur John 2008-09-16 21:57:31

15 réponses

est-ce à inclure:

  • numéros Internationaux?
  • Extensions?
  • D'autres informations que le nombre réel (comme "demandez bobby")?

si toutes ces réponses sont non, j'utiliserais un champ de 10 caractères et je supprimerais toutes les données non numériques. Si le premier est un oui et les deux autres sont non, j'utiliserais deux champs varchar(50), un pour l'entrée originale et un avec toutes les données non numériques rayé et utilisé pour l'indexation. Si 2 ou 3 sont oui, je pense que je ferais deux champs et une sorte d'analyseur fou pour déterminer ce qui est extension ou d'autres données et traiter avec elle de manière appropriée. Bien sûr, vous pouvez éviter la deuxième colonne en faisant quelque chose avec l'index où il supprime les caractères supplémentaires lors de la création de l'index, mais je ferais juste une deuxième colonne et probablement faire le stripping des caractères avec un déclencheur.

mise à jour: pour répondre à la question AJAX, il ne peut pas être comme mauvais que vous le pensez. Si c'est de façon réaliste la manière principale quelque chose est fait à la table, stocker seulement les chiffres dans une colonne secondaire comme je l'ai dit, et puis faire l'index pour cette colonne le groupé.

47
répondu Kearns 2008-09-17 17:36:28

nous utilisons varchar(15) et certainement index sur ce domaine.

la raison étant que les normes internationales peuvent supporter jusqu'à 15 chiffres

Wikipedia - Formats Des Numéros De Téléphone

si vous supportez les numéros internationaux, je recommande le stockage séparé d'un Code de Zone mondiale ou D'un Code de pays pour mieux filtrer les requêtes de sorte que vous ne vous trouvez pas vous-même parsing et de vérifier la longueur de vos champs de numéro de téléphone pour limiter les appels retournés aux États-Unis par exemple

30
répondu Brad Osterloo 2008-09-17 03:09:08

utilisez CHAR (10) si vous stockez des numéros de téléphone US seulement. Enlève tout sauf les chiffres.

4
répondu Joseph Bui 2008-09-16 18:00:49

je suis probablement en train de rater l'évidence ici, mais est-ce qu'un varchar juste assez longtemps pour votre numéro de téléphone le plus long prévu ne fonctionnerait pas bien?

Si je suis manque quelque chose d'évident, je l'aime si quelqu'un serait-il remarquer...

3
répondu cori 2008-09-16 18:00:02

j'utiliserais un varchar(22). Assez grand pour tenir un numéro de téléphone nord-américain avec extension. Vous voulez éliminer tous les méchants '(', ')', '-' les personnages, ou tout simplement de les analyser dans un format uniforme.

Alex

3
répondu Alex Fort 2008-09-16 18:00:33

SQL Server 2005 est assez bien optimisé pour la soustraction des requêtes pour le texte dans les champs varchar indexés. Pour 2005, ils ont introduit de nouvelles statistiques dans le résumé de chaîne de caractères pour les champs d'index. Cela facilite grandement la recherche en texte intégral.

2
répondu Joseph Daigle 2008-09-16 18:02:01

utilisant varchar est assez inefficace. utilisez le type d'argent et créez un utilisateur a déclaré le type" phonenumber " hors de lui, et créez une règle pour n'autoriser que les nombres positifs.

si vous le déclarez comme (19,4) vous pouvez même stocker une extension de 4 chiffres et être assez grand pour les numéros internationaux, et ne prend que 9 octets de stockage. En outre, les indices sont rapides.

2
répondu fjleon 2011-05-03 16:12:23

nvarchar avec prétraitement pour les normaliser autant que possible. Vous voudrez probablement extraire des extensions et les stocker dans un autre domaine.

1
répondu John Sheehan 2008-09-16 17:59:02

normaliser les données puis stocker comme un varchar. La normalisation pourrait être délicate.

ça devrait être un coup unique. Puis quand un nouvel enregistrement arrive, vous le comparez à des données normalisées. Devrait être très rapide.

1
répondu Iain Holder 2008-09-16 17:59:44

puisque vous avez besoin de s'adapter à de nombreux formats de numéros de téléphone différents (et probablement inclure des choses comme les extensions, etc. il peut faire le plus de sens de le traiter comme vous le feriez n'importe quel autre varchar. Si on pouvait contrôler l'entrée, vous pouvez prendre un certain nombre d'approches pour rendre les données plus utiles, mais il ne semble pas de cette façon.

une fois que vous avez décidé de simplement le traiter comme n'importe quelle autre chaîne, vous pouvez vous concentrer sur surmonter les problèmes inévitables concernant les mauvaises données, un mystérieux numéro de téléphone qui se forme et tout ce qui va surgir. Le défi consistera à élaborer une bonne stratégie de recherche pour les données et non la façon dont vous les Conservez à mon avis. C'est toujours une tâche difficile d'avoir affaire à une grande pile de données que vous n'aviez aucun contrôle sur la collecte.

1
répondu 2008-09-16 18:05:57

utiliser SSIS pour extraire et traiter l'information. De cette façon, vous aurez le traitement des fichiers XML séparé de SQL Server. Vous pouvez également effectuer les transformations SSIS sur un serveur séparé si nécessaire. Enregistrez les numéros de téléphone dans un format standard en utilisant VARCHAR. NVARCHAR serait inutile puisque nous parlons de chiffres et peut-être quelques autres caractères, comme '+', ' ', '(', ')' et '-'.

1
répondu Magnus Johansson 2008-09-16 18:09:01

utilisez un champ varchar avec une restriction de longueur.

1
répondu user13270 2011-08-15 11:18:27

il est assez courant d'utiliser un" x "ou un" ext "pour indiquer des extensions, de sorte que permettre 15 caractères (pour un support international complet) plus 3 (pour" ext") plus 4 (pour l'extension elle-même) donnant un total de 22 caractères. Qui devrait vous garder en sécurité.

alternativement, normalisez sur l'entrée de sorte que tout " ext "soit traduit en" x", donnant un maximum de 20.

1
répondu Rob G 2013-07-22 09:34:23

je me rends compte que ce fil est vieux, mais il est intéressant de mentionner un avantage de stocker comme un type numérique à des fins de formatage, spécifiquement dans le cadre .NET.

IE

.DefaultCellStyle.Format = "(###)###-####" // Will not work on a string
1
répondu user238615 2018-01-31 17:33:10

il est toujours préférable d'avoir des tables distinctes pour les attributs à valeurs multiples comme le numéro de téléphone.

comme vous n'avez aucun contrôle sur les données source, vous pouvez analyser les données du fichier XML et de le convertir dans le format approprié de sorte qu'il n'y aura pas de problème avec les formats d'un pays particulier et de le stocker dans un tableau séparé de sorte que l'indexation et la récupération à la fois seront efficaces .

Merci vous.

0
répondu Jayghosh Wankar 2017-08-12 14:36:15