259 votes

Quelle est la longueur maximale possible d'un numéro de téléphone mondial que je devrais considérer dans SQL varchar (longueur) pour le téléphone

Quelle est la plus longue longueur possible d'un numéro de téléphone mondial que je devrais considérer en SQL varchar(longueur) pour le téléphone.

considérations:

  • + pour le code pays
  • () pour le code régional
  • x + 6 chiffres pour l'extension (donc cela fait 8 {espace})
  • espaces entre les groupes (c'est-à-dire dans les téléphones américains +x xxx xxx xxxx = 3 espaces)
  • c'est là que j'ai besoin de votre aide, je veux que ce soit mondial

Considérez que dans mon cas particulier actuellement, je n'ai pas besoin de cartes, etc. le numéro commence par le code pays et se termine par l'extension, pas de commentaires Fax/Téléphone, etc., ni de besoins en cartes d'appel.

1 votes

Je pense que convertir le nombre en une valeur longue serait une bonne solution, et cela ne nécessitera que 64 bits d'espace. Je l'utilise depuis des années, sans problèmes

4 votes

1 votes

@MattDiPasquale a déjà mentionné ici, mais merci !

214voto

Matt Enright Points 2949

En supposant que vous ne stockez pas des éléments tels que le '+', '()', '-', les espaces et autres détails (et pourquoi le feriez-vous, ce sont des préoccupations de présentation qui varieraient en fonction des coutumes locales et des réseaux de distribution de toute façon), la recommandation de l'UIT-T E.164 pour le réseau téléphonique international (auquel la plupart des réseaux nationaux sont connectés) spécifie que le numéro complet (y compris le code pays, mais pas y compris les préfixes tels que le préfixe d'appel international nécessaire pour faire un appel, qui varie d'un pays à l'autre, ni y compris des suffixes, tels que les numéros d'extension de PBX) doit être d'au plus 15 caractères.

Les préfixes d'appel dépendent de l'appelant, et non de l'appelé, et ne devraient donc pas (dans de nombreuses circonstances) être stockés avec un numéro de téléphone. Si la base de données stocke des données pour un carnet d'adresses personnel (auquel cas le stockage du préfixe d'appel international a du sens), les préfixes internationaux les plus longs avec lesquels vous auriez à traiter (selon Wikipedia) sont actuellement de 5 chiffres, en Finlande.

Quant aux suffixes, certains PBX prennent en charge jusqu'à 11 chiffres d'extensions (encore une fois, selon Wikipedia). Étant donné que les numéros d'extension de PBX font partie d'un plan d'appel différent (les PBX sont séparés des échanges des sociétés de téléphonie), les numéros d'extension doivent être distinguables des numéros de téléphone, soit avec un caractère séparateur, soit en les stockant dans une colonne différente.

6 votes

Si vous ne stockez pas les caractères de format (comme '+', '(', ')', '-', et ' ') et que vous stockez des nombres de différentes nations, vous voudrez peut-être ajouter une colonne pour indiquer le type de format du nombre lors de son affichage.

63 votes

En bas : 15 caractères. Si on stocke le préfixe et le suffixe, la ligne du bas est : 5+15+11=31.

3 votes

@MattEnright, Je pense que tu devrais mettre à jour le commentaire de AlikElzin dans ta réponse.

99voto

cletus Points 276888

Eh bien, étant donné qu'il n'y a pas de différence de surcharge entre un varchar(30) et un varchar(100) si vous ne stockez que 20 caractères dans chacun, il vaut mieux jouer la prudence et le mettre simplement à 50.

29 votes

Juste pour la connaissance : donc quand y a-t-il des frais généraux ? Veuillez inclure une source dans votre réponse, afin que nous puissions avancer et en apprendre les bases.

7 votes

Je sais que cela devrait être le cas, mais ce n'est pas toujours le cas. Dans MySQL, par exemple, la longueur totale est utilisée pour le tri. Il est préférable d'appliquer au moins un effort minimal.

2 votes

Lorsque vous utilisez un CHAR par exemple. La documentation de SQL Server (pour y lire vous-même) montre exactement que la taille inutilisée en varchar n'est vraiment pas utilisée, c'est-à-dire que le surcoût des caractères inutilisés est de 0.

18voto

KevinDTimm Points 10056

Dans la spécification GSM 3GPP TS 11.11, il y a 10 octets réservés dans le fichier MSISDN EF (6F40) pour le 'numéro de composition'. Comme il s'agit de la représentation GSM d'un numéro de téléphone, et que son utilisation est permutée par quartet, (et qu'il y a toujours la possibilité de parenthèses) 22 caractères de données devraient suffire.

Dans mon expérience, il n'y a qu'une seule instance de parenthèses ouvrante/fermante, c'est ma raison pour ce qui précède.

11voto

webclimber Points 1638

C'est un peu pire, j'utilise une carte d'appel pour les appels internationaux, donc son numéro local aux États-Unis + numéro de compte (6 chiffres) + NIP (4 chiffres) + "pause" + ce que vous avez décrit ci-dessus.

Je soupçonne qu'il pourrait y avoir d'autres cas

2 votes

Vous avez un très bon point. J'ai ajouté quelques lignes à mon message, s'il vous plaît lire

10 votes

La composition automatique du numéro d'appel ne devrait pas figurer dans la base de données, car c'est la partie qui est ajoutée lors de la composition selon les règles de composition. Les numéros stockés devraient être sous forme ISO, sans aucune information liée à la composition.

4voto

Janus Troelsen Points 5121

Les forums Straight Dope semblent dire 20 caractères.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X