Ich verwende MySQL mit Spring JDBC-Vorlage für meine Webanwendung. Ich muss die Telefonnummer nur mit Ziffern (10) speichern. Ich bin etwas verwirrt über den Datentyp, der den Datentyp verwendet.
- Was ist der bevorzugte Datentyp in MySQL?
- Was sollte der Java-Datentyp in Bean (POJO) -Klassen dafür sein?
- Wie kann ich diesen Datentyp mit Javax-Validierungen / Einschränkungen hinsichtlich der Länge und auch nur der zulässigen Ziffer validieren?
quelle
-
. Lassen Sie den Benutzer formatieren, wie er möchte. Zumindest in der frühen Entwicklung würde die Formatierung von Zahlen auf meiner Feature-Liste nicht sehr weit oben stehen.VARCHAR
am besten passt, aber nicht aus den in dieser Antwort genannten Gründen. Die Frage betrifft die Speicherung und nicht die Formatierung. Die Telefonnummer sollte vor der Speicherung in E.164 umgewandelt werden . Es gibt keine Telefonnummer, mit der0
in diesem Format begonnen werden kann. Wenn Sie also das Startzeichen entfernen+
(das Sie nach dem Abrufen aus der Datenbank hinzufügen können), können Sie es als speichernBIGINT
. Der einzige Nachteil dabei ist, dass es schwieriger ist, nach teilweise eingegebenen Telefonnummern zu suchen. Aber der Vorteil - es nimmt weniger Bytes ein und MySQL arbeitet schneller.+
oder-
oder sogar ein führender ,0
wenn Sie effizient nutzen könnensmallint
fürdialcode
undlongint
fürnumber
so Raum zu minimieren , und wählen Sie die Leistung zu verbessern?In MySQL bedeutet -> INT (10) keine 10-stellige Zahl, sondern eine Ganzzahl mit einer Anzeigebreite von 10 Stellen. Der Maximalwert für eine INT in MySQL ist 2147483647 (oder 4294967295, wenn nicht signiert).
Wenn Sie "Land + Gebiet + Nummer separat" speichern möchten. Versuchen Sie es mit einem VARCHAR (20). Auf diese Weise können Sie internationale Telefonnummern bei Bedarf ordnungsgemäß speichern.
quelle
Erwägen Sie die Verwendung des E.164- Formats. Für eine vollständige internationale Unterstützung benötigen Sie eine 15-stellige VARCHAR.
Siehe Twilio Empfehlung für weitere Informationen über die Lokalisierung von Telefonnummern.
quelle
String
Eine einfache Regex. Siehe: So überprüfen Sie, ob eine Zeichenfolge in Java nur Ziffern enthält . Verwenden Sie javax.constraints.Pattern.
quelle
VARCHAR mit einer Länge von wahrscheinlich 15 bis 20 wäre ausreichend und die beste Option für die Datenbank. Da würden Sie wahrscheinlich verschiedene Bindestriche und Pluszeichen zusammen mit Ihren Telefonnummern benötigen.
quelle
Sie können var-char, String und int verwenden. Es hängt von Ihnen ab, ob Sie nur den Ländercode mit der Handynummer verwenden, als Sie int verwenden können. Wenn Sie ein spezielles Format für die Nummer verwenden, verwenden Sie String oder den Typ var-char, wenn Sie Verwenden Sie var-char, um die Größe der Nummer zu verunreinigen und den Benutzer einzuschränken.
quelle
Es hängt alles von Ihren Anforderungen ab. Wenn Sie eine kleine App entwickeln und nur eine bestimmte Region (Zielgruppe) abdecken, können Sie BIGINT auswählen, um nur Zahlen zu speichern, da VARCHAR mehr Byte als BIGINT verbraucht (bei optimalem Design der Speichernutzung). Wenn Sie jedoch eine groß angelegte App entwickeln und globale Benutzer ansprechen und über genügend Datenbankfunktionen zum Speichern von Daten verfügen, können Sie sich definitiv für VARCHAR entscheiden.
quelle
Dies ist meine Meinung zu meiner Datenbank, wie von meinem Mentor empfohlen
quelle
Meine Anforderung ist es, eine 10-stellige Telefonnummer im JSP anzuzeigen. Hier ist das Setup für mich.
MySQL:
numeric(10)
Java-Seite:
@NumberFormat(pattern = "#") private long mobileNumber;
und es hat funktioniert!
quelle
In MySQL: BIGINT. In Java: Lang.
quelle