J'utilise MySQL avec le modèle Spring JDBC pour mon application Web. Je dois enregistrer un numéro de téléphone avec seulement des chiffres (10). Je suis un peu confus sur le type de données en utilisant le type de données.
Cordes et VARCHAR.
N'essayez pas de stocker des numéros de téléphone en tant que numéros réels. cela va ruiner la mise en forme, supprimer les 0
s précédents et d’autres choses indésirables.
Vous pouvez, si vous le souhaitez, limiter les entrées utilisateur à des valeurs numériques tout en conservant vos données persistantes sauvegardées sous forme de caractères/chaînes et non de chiffres.
Soyez conscient du monde dans son ensemble et de la différence de longueur et de format de leurs nombres avant d'essayer d'implémenter des restrictions de longueur, des validations ou des masques (par exemple, XXX-XXXX-XX).
Les caractères non numériques peuvent être valides dans les numéros de téléphone. Un exemple typique étant +
en remplacement de 00
au début d'un numéro international.
Edité à partir de la conversation dans les commentaires:
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 d'une INT dans MySQL est 2147483647 (ou 4294967295 si non signé).
Vous pouvez utiliser un BIGINT au lieu de INT pour le stocker sous forme numérique. En utilisant BIGINT vous fera économiser 3 octets par ligne sur VARCHAR (10).
Si vous souhaitez enregistrer "Pays + zone + numéro séparément". Essayez d’utiliser un VARCHAR (20). Cela vous permet de stocker correctement les numéros de téléphone internationaux, le cas échéant.
Pensez à utiliser le format E.164 . Pour une assistance internationale complète, vous avez besoin d’un VARCHAR de 15 chiffres.
Voir Recommandation Twilio pour plus d'informations sur la localisation des numéros de téléphone.
Chaîne
Une regex simple. Voir: Comment vérifier si une chaîne ne contient que des chiffres en Java . Utilisez javax.constraints.Pattern.
vous pouvez utiliser var-char, String et int, cela dépend de vous, si vous utilisez uniquement le code pays avec le numéro de portable que vous pouvez utiliser int, si vous utilisez un format spécial pour le nombre que vous utilisez le type String ou var-char, si vous le souhaitez. utilisez var-char puis doit masquer la taille du nombre et restreindre l'accès à l'utilisateur.
VARCHAR avec probablement 15 à 20 longueurs serait suffisant et constituerait la meilleure option pour la base de données. Étant donné que vous auriez probablement besoin de divers traits d'union et signes plus avec vos numéros de téléphone.
Dans MySQL: BIGINT . En Java: Long.
Tout est basé sur vos besoins. Si vous développez une application à petite échelle et que vous ne couvrez qu'une région spécifique (public cible), vous pouvez choisir BIGINT pour stocker uniquement des nombres, car VARCHAR consomme plus d'octets que BIGINT (l'utilisation optimale de la mémoire importe peu). mais si vous développez une application à grande échelle et cible des utilisateurs mondiaux et que vous disposez de suffisamment de capacités de base de données pour stocker des données, vous pouvez certainement choisir VARCHAR.