Quelle est une bonne structure de données pour stocker des numéros de téléphone dans des champs de base de données ? Je cherche quelque chose qui soit suffisamment souple pour gérer les numéros internationaux et qui permette d'interroger efficacement les différentes parties du numéro.
Editar: Juste pour clarifier le cas d'utilisation ici : Je stocke actuellement les numéros dans un champ varchar unique, et je les laisse tels que le client les a saisis. Ensuite, lorsque le numéro est requis par le code, je le normalise. Le problème est que si je veux interroger quelques millions de lignes pour trouver les numéros de téléphone qui correspondent, cela implique une fonction, par exemple
where dbo.f_normalizenum(num1) = dbo.f_normalizenum(num2)
ce qui est terriblement inefficace. De même, les requêtes qui recherchent des éléments tels que l'indicatif régional deviennent extrêmement délicates lorsqu'il ne s'agit que d'un seul champ de type varchar.
[Edit]
Les gens ont fait beaucoup de bonnes suggestions ici, merci ! 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 les enregistrements sont insérés ou mis à jour. J'ai donc des ints ou des bigints pour toutes les parties que je dois interroger, et ces champs sont indexés pour accélérer l'exécution des requêtes.
0 votes
Une réponse contemporaine à cette question se trouve ici - stackoverflow.com/a/51761170/968003 . L'essentiel est d'utiliser la RFC 3966 pour le stockage et libphonenumber pour l'analyse/validation.