web-dev-qa-db-fra.com

Comment stocker des numéros de téléphone sur des bases de données MySQL?

Duplicate possible:
type de données mysql pour le numéro de téléphone et l'adresse

Des suggestions sur les meilleures pratiques pour stocker les numéros de téléphone dans une base de données? Considérons un numéro de téléphone américain:

  • 555 555 1212
  • 555-555-1212
  • (555) 555 1212
  • 5555551212
  • 1-555-555-1212
  • 1 (555) 555-1212
  • etc ...

Dois-je supprimer le formatage et ne stocker que des nombres? Devrais-je utiliser un seul champ - ou les diviser en: indicatif du pays, indicatif régional, numéro de téléphone, etc.? Suggestions?

73
  • Tous comme varchar (ce ne sont pas des nombres mais des "collections de chiffres")
  • Pays + région + numéro séparément
  • Tous les pays n'ont pas d'indicatif régional (par exemple, Malte où je suis)
  • Certains pays suppriment le zéro de l'indicatif régional lorsqu'ils composent un numéro interne (par exemple, le Royaume-Uni).
  • Format dans le code client
148
gbn

Vous ne devriez jamais stocker de valeurs avec le format. Le formatage doit être effectué dans la vue en fonction des préférences de l'utilisateur.

La recherche de numéros de téléphone avec un formatage mixte est presque impossible.

Dans ce cas, je me séparerais en champs et stockerais sous forme d'entier. Les nombres sont plus rapides que les textes. En les séparant et en les indexant, toutes les requêtes sont exécutées rapidement.

Diriger 0 pourrait être un problème mais probablement pas. En Suède, tous les indicatifs régionaux commencent par 0 et sont supprimés si un indicatif de pays est également composé. Mais le 0 ne fait pas vraiment partie du nombre, c'est un indicateur utilisé pour indiquer que j'ajoute un indicatif régional. Pareil pour le code de pays, vous ajoutez 00 pour dire que vous utilisez un code de comté.

Les 0 premiers ne doivent pas être stockés, ils doivent être ajoutés en cas de besoin. Supposons que vous stockiez 00 dans la base de données et que vous utilisiez un serveur qui ne fonctionne qu'avec + vous devez remplacer 00 par + pour cette application.

Donc, stockez les nombres sous forme de nombres.

28
Andreas Wederbrand

Je suggère de stocker les nombres dans un varchar sans formater. Vous pouvez ensuite reformater les chiffres côté client de manière appropriée. Certaines cultures préfèrent avoir des numéros de téléphone écrits différemment; en France, ils écrivent des numéros de téléphone comme le 01-22-33-44-55.

Vous pouvez également envisager de stocker un autre champ pour le pays auquel le numéro de téléphone est destiné, car il peut être difficile à déterminer en fonction du numéro que vous consultez. Le Royaume-Uni utilise des numéros à 11 chiffres, certains pays africains utilisent des numéros à 7 chiffres.

Cela dit, j’ai travaillé pour une compagnie de téléphone britannique et nous avons enregistré les numéros de téléphone dans notre base de données, qu’ils soient britanniques ou internationaux. Ainsi, un numéro de téléphone britannique serait le 02081234123 et un numéro international serait le 001800300300.

11
Steve Rukuts

varchar, Ne stockez pas les caractères de séparation. Il se peut que vous souhaitiez formater les numéros de téléphone différemment pour des utilisations différentes. so store (619) 123-4567 en tant que 6191234567 Je travaille avec les données de l’annuaire téléphonique et j’ai trouvé que cette pratique était la meilleure.

9
SurferJoe

Je suggérerais un varchar pour le numéro de téléphone (car les numéros de téléphone sont connus pour avoir des 0 en tête qu'il est important de conserver) et avoir le numéro de téléphone dans deux champs:

Code de pays et numéro de téléphone, c'est-à-dire pour 004477789787 vous pouvez stocker CountryCode = 44 et numéro de téléphone = 77789787

cependant, cela pourrait être très spécifique à l'application. Si, par exemple, vous ne stockez que des numéros américains et souhaitez conserver la possibilité d'effectuer rapidement des requêtes telles que "Obtenir tous les numéros d'une zone spécifique", vous pouvez fractionner davantage le champ du numéro de téléphone (et supprimer le champ du code de pays tel qu'il serait redondant)

Je ne pense pas qu'il y ait une bonne et une mauvaise façon générale de faire cela. Cela dépend vraiment des demandes.

4
apokryfos

Je recommanderais de les stocker sous forme de nombres dans des colonnes de type varchar - une colonne par "champ" (comme un code de code, etc.).

Le format doit être appliqué lorsque vous interagissez avec un utilisateur ... ce qui facilite la prise en compte des modifications de format, par exemple, et aidera notamment. quand votre demande devient internationale ...

1
Yahia

Pour former mon point de vue, voici mes suggestions:

  1. Enregistrez le numéro de téléphone dans un champ unique sous le nom varchar. Si vous avez besoin de scinder, récupérez-le en conséquence.
  2. Si vous stockez en tant que nombre, le chiffre 0 précédent sera tronqué, donc stockez-le toujours en tant que varchar
  3. Validez le numéro de téléphone des utilisateurs avant de l'insérer dans votre tableau.
1
Elias Hossain

Vous suggérons de stocker le numéro sous forme alphanumérique étendue composée de caractères que vous souhaitez accepter et de le stocker dans un varchar (32) ou quelque chose du genre. Supprimez tous les espaces, les tirets, etc. Mettez le formatage du numéro de téléphone dans un champ séparé (éventuellement glané dans les préférences locales) Si vous souhaitez prendre en charge les extensions, vous devez les ajouter dans un champ séparé;

1
Ahmed Masud

Je voudrais certainement les séparer. Il serait facile de trier les numéros par indicatif régional et code de pays. Mais même si vous ne vous séparez pas, insérez simplement les nombres dans la base de données dans un format donné. par exemple. 1-555-555-1212 Votre côté client sera reconnaissant de ne pas lui avoir demandé de reformater vos chiffres.

0
mintobit