Quel est le meilleur type de données pour le numéro de téléphone dans MySQL et quel devrait être le mappage de type Java?


J'utilise MySQL avec le modèle Spring JDBC pour mon application Web. J'ai besoin de stocker le numéro de téléphone avec seulement des chiffres (10). Je suis un peu confus au sujet du type de données en utilisant le type de données.

  1. Quel est le type de données préférable pour cela dans MySQL?
  2. Quel devrait être le type de données Java dans les classes Bean (POJO) pour cela?
  3. Comment puis-je valider ce type de données avec les validations/contraintes javax pour la longueur et aussi seulement le chiffre autorisé?
Author: Gaurav Dave, 2014-06-22

9 answers

Chaînes & VARCHAR.

  • N'essayez pas de stocker les numéros de téléphone en tant que numéros réels. cela ruinera le formatage, supprimera les 0précédents et d'autres choses indésirables.

  • Vous pouvez, si vous le souhaitez, restreindre les entrées utilisateur aux seules valeurs numériques, mais même dans ce cas, conserver vos données persistantes de sauvegarde sous forme de caractères/chaînes et non de nombres.

  • Soyez conscient du monde plus large et de la façon dont leurs nombres longueurs et formatage diffèrent avant d'essayer de mettre en œuvre toute sorte de restrictions de longueur, validations ou masques (par exemple XXX-XXXX-XX).

  • Les caractères non numériques peuvent être valides dans les numéros de téléphone. Un premier exemple est + en remplacement de 00 au début d'un numéro international.

Édité dans la conversation dans les commentaires:

  • C'est l'une des plus grandes erreurs de l'interface utilisateur que les numéros de téléphone ont quelque chose à voir avec les chiffres. Il vaut mieux penser et les traiter comme des adresses, c'est plus proche de quoi ils sont en fait et représentent que les "numéros"de téléphone.
 28
Author: indivisible, 2018-05-16 12:09:32

Dans MySQL -> INT(10) ne signifie pas un nombre à 10 chiffres, mais un entier avec une largeur d'affichage de 10 chiffres. La valeur maximale pour un INT dans MySQL est 2147483647 (ou 4294967295 si non signé).

Vous pouvez utiliser un BIGINT au lieu de INT pour le stocker en tant que numérique. Utiliser BIGINT vous fera économiser 3 octets par ligne sur VARCHAR(10).

Si vous souhaitez stocker "Pays + zone + numéro séparément". Essayez d'utiliser un VARCHAR (20). Cela vous permet de stocker un téléphone international correctement, si besoin est.

 7
Author: Irshad Khan, 2016-03-09 10:36:33

Envisagez d'utiliser le formatE. 164 . Pour une assistance internationale complète, vous aurez besoin d'un VARCHAR de 15 chiffres.

VoirRecommandation de Twilio pour plus d'informations sur la localisation des numéros de téléphone.

 3
Author: 00500005, 2016-02-06 02:07:31
  1. varchar
  2. Chaîne

  3. Une expression régulière simple. Voir: Comment vérifier si une chaîne ne contient que des chiffres en Java. Utilisation javax.contraintes.Modèle.

 2
Author: GreyBeardedGeek, 2017-05-23 12:26:14

Vous pouvez utiliser var-char,String et int,cela dépend de vous ,si vous utilisez uniquement le code de pays avec le numéro de téléphone mobile que vous pouvez utiliser int, si vous utilisez un formate spécial pour le nombre que d'utiliser String ou var-char type,si vous utilisez var-char alors doit souiller la taille du nombre et restreindre

 1
Author: damon, 2015-02-21 06:22:46

VARCHAR avec probablement une longueur de 15 à 20 serait suffisant et serait la meilleure option pour la base de données. Puisque vous auriez probablement besoin de divers traits d'union et signes plus avec vos numéros de téléphone.

 0
Author: ncdreamy, 2014-06-22 17:31:21

Dans mysql: BIGINT. En java: Long.

 0
Author: Александр Аверьянов, 2017-10-13 08:51:54

Mon exigence est d'afficher un numéro de téléphone à 10 chiffres dans le jsp. Donc voici la configuration pour moi.
MySQL: numeric(10)

Côté Java:

@NumberFormat(pattern = "#")  
private long mobileNumber;

Et ça a marché!

 0
Author: mannedear, 2018-08-15 05:47:26

Tout est basé sur vos besoins. si vous développez une application à petite échelle et ne couvre qu'une région spécifique (public cible), vous pouvez choisir BIGINT pour ne stocker que des nombres car VARCHAR consomme plus d'octets que BIGINT ( la conception de l'utilisation optimale de la mémoire est importante ). mais si vous développez une application à grande échelle et que vous ciblez des utilisateurs mondiaux et que vous avez suffisamment de capacités de base de données pour stocker des données, vous pouvez certainement choisir VARCHAR.

 0
Author: bala raja, 2018-08-29 06:30:01