Quelle est une bonne structure de données pour stocker les numéros de téléphone dans les champs de base de données? Je recherche quelque chose qui soit suffisamment flexible pour gérer les numéros internationaux, et aussi quelque chose qui permette d'interroger efficacement les différentes parties du numéro.
Edit: Juste pour clarifier le cas d'utilisation ici: je stocke actuellement les numéros dans un seul champ varchar, et je les laisse comme le client les a saisis. Ensuite, lorsque le numéro est nécessaire par code, je le normalise. Le problème est que si je veux interroger quelques millions de lignes pour trouver des numéros de téléphone correspondants, cela implique une fonction, comme
where dbo.f_normalizenum(num1) = dbo.f_normalizenum(num2)
ce qui est terriblement inefficace. Les requêtes qui recherchent des éléments comme l'indicatif régional deviennent également extrêmement délicates lorsqu'il ne s'agit que d'un seul champ varchar.
[Éditer]
Les gens ont fait beaucoup de bonnes suggestions ici, merci! En guise de mise à jour, voici ce que je fais maintenant: je stocke toujours les numéros exactement tels qu'ils ont été saisis, dans un champ varchar, mais au lieu de normaliser les choses au moment de la requête, j'ai un déclencheur qui fait tout ce travail lorsque des enregistrements sont insérés ou mis à jour. J'ai donc des ints ou des bigints pour toutes les parties que j'ai besoin d'interroger, et ces champs sont indexés pour accélérer les requêtes.