webentwicklung-frage-antwort-db.com.de

Welches ist der beste Datentyp für eine Telefonnummer in MySQL und für welchen Typ sollte das Java-Typ-Mapping verwendet werden?

Ich verwende MySQL mit der Spring JDBC-Vorlage für meine Webanwendung. Ich muss die Telefonnummer nur mit Ziffern speichern (10). Ich bin etwas verwirrt über Datentyp mit Datentyp.

  1. Was ist der bevorzugte Datentyp dafür in MySQL?
  2. Was sollte der Java-Datentyp in Bean (POJO) -Klassen dafür sein?
  3. Wie kann ich diesen Datentyp mit javax-Validierungen/Einschränkungen für die Länge und auch nur die zulässige Ziffer überprüfen?
33

Streicher & VARCHAR.

  • Speichern Sie Telefonnummern nicht als tatsächliche Nummern. es zerstört die Formatierung, entfernt 0s und andere unerwünschte Dinge.

  • Wenn Sie möchten, können Sie die Benutzereingaben auf nur numerische Werte beschränken, aber selbst in diesem Fall behalten Sie die Sicherung Ihrer Daten als Zeichen/Strings und nicht als Zahlen.

  • Achten Sie auf die weitere Welt und darauf, wie sich deren Längen und Formatierungen unterscheiden, bevor Sie versuchen, Längenbeschränkungen, Validierungen oder Masken (z. B. XXX-XXXX-XX) zu implementieren.

  • Nicht-numerische Zeichen können in Telefonnummern gültig sein. Ein gutes Beispiel ist + als Ersatz für 00 am Anfang einer internationalen Nummer.

Aus Konversation in Kommentaren bearbeitet: 

  • Es ist einer der größeren Fehler der Benutzeroberfläche, dass Telefonnummern etwas mit Zahlen zu tun haben. Es ist viel besser, sie als Adressen zu betrachten und zu behandeln, sie sind näher an dem, was sie tatsächlich sind und repräsentieren, als Telefonnummern.
41
indivisible

In MySQL -> INT (10) bedeutet keine 10-stellige Zahl, sondern eine ganze Zahl mit einer Anzeigebreite von 10 Ziffern. Der Maximalwert für ein INT in MySQL ist 2147483647 (oder 4294967295, wenn es nicht vorzeichenbehaftet ist).

Sie können einen BIGINT anstelle von INT verwenden, um ihn als Zahl zu speichern. Verwenden von BIGINT speichert 3 Bytes pro Zeile über VARCHAR (10).

Wenn Sie "Land + Gebiet + Nummer separat speichern" möchten. Versuchen Sie es mit einem VARCHAR (20). Dadurch können Sie internationale Telefonnummern ordnungsgemäß speichern, falls dies erforderlich sein sollte.

11
Irshad Khan

Verwenden Sie das Format E.164 . Für eine vollständige internationale Unterstützung benötigen Sie einen 15-stelligen VARCHAR.

Siehe Twilios Empfehlung für weitere Informationen zur Lokalisierung von Telefonnummern.

4
00500005
  1. varchar
  2. String

  3. Eine einfache Regex. Siehe: So prüfen Sie, ob eine Zeichenfolge nur Ziffern in Java enthält . Verwenden Sie javax.constraints.Pattern.

2
GreyBeardedGeek

sie können var-char, String und int verwenden. Es hängt von Ihnen ab, ob Sie nur die Landesvorwahl mit Handynummer verwenden, als Sie int verwenden können use var-char muss dann die Größe der Zahl defile und vom Benutzer einschränken.

1
damon

VARCHAR mit wahrscheinlich 15-20 Länge wäre ausreichend und wäre die beste Option für die Datenbank. Da würden Sie wahrscheinlich verschiedene Bindestriche und Pluszeichen zusammen mit Ihren Telefonnummern benötigen. 

0
NcDreamy

In MySQL: BIGINT . In Java: Long.

Es hängt alles von Ihrer Anforderung ab. Wenn Sie eine kleine App entwickeln, die nur eine bestimmte Region (Zielgruppe) abdeckt, können Sie BIGINT auswählen, um nur Zahlen zu speichern, da VARCHAR mehr Byte als BIGINT verbraucht (was den Entwurf des optimalen Speicherverbrauchs betrifft). Wenn Sie jedoch eine umfangreiche App entwickeln, die auf globale Benutzer abzielt und über genügend Datenbankfunktionen zum Speichern von Daten verfügt, können Sie VARCHAR definitiv wählen. 

0
bala raja