2014-06-22 18 views
17

Sto usando MySQL con il modello Spring JDBC per la mia applicazione web. Ho bisogno di memorizzare il numero di telefono con solo cifre (10). Sono un po 'confuso riguardo al tipo di dati che usa il tipo di dati.Qual è il miglior tipo di dati per il numero di telefono in MySQL e cosa dovrebbe essere la mappatura del tipo Java?

  1. Qual è il tipo di dati preferibile per esso in MySQL?
  2. Quale dovrebbe essere il tipo di dati Java nelle classi Bean (POJO) per quello?
  3. Come posso convalidare quel tipo di dati con validazioni/vincoli javax per la lunghezza e anche solo le cifre consentite?

risposta

21

Corde & VARCHAR.

  • Non provare a memorizzare numeri di telefono come numeri reali. rovinerà la formattazione, rimuoverà i precedenti 0 s e altre cose indesiderabili.

  • È possibile, se si sceglie, limitare gli input utente a valori numerici ma, anche in questo caso, mantenere i dati di backup persistenti come caratteri/stringhe e non numeri.

  • Essere consapevoli del mondo più ampio e del modo in cui le lunghezze e la formattazione dei numeri differiscono prima di provare a implementare restrizioni di sorta, validazione o mascheramento (XXX-XXXX-XX).

  • I caratteri non numerici possono essere numeri di telefono validi. Un esempio è + in sostituzione di 00 all'inizio di un numero internazionale.

+0

Si consiglia di non limitare i caratteri, se un essere umano lo leggerà. Paesi diversi hanno convenzioni diverse e ci sono buone possibilità che oltre a leggere un numero nel paese C si riconosca la convenzione che una persona nel paese C ha usato per inserirla. – yshavit

+0

Personalmente lo limiterei a [0-9], solo uno spazio o un trattino '-'. lascia che l'utente formatta come preferisce. Almeno all'inizio: la formattazione dei numeri non sarebbe molto alta nella mia lista delle caratteristiche. – indivisible

+0

ma supponiamo che voglio solo cifre .. e anche il mio sistema sarà per un solo paese ... poi? –

0

VARCHAR con probabilmente 15-20 lunghezza sarebbe sufficiente e sarebbe l'opzione migliore per il database. Dal momento che probabilmente avrai bisogno di vari trattini e segni più insieme ai tuoi numeri di telefono.

1

è possibile utilizzare var-char, String e int, dipende da te, se si utilizza solo il codice paese con numero di cellulare di quello che è possibile utilizzare int, se si utilizza il formiato speciale per il numero di utilizzare String o var-char type, se usi var-char, allora devi defile size of number e restringere all'utente.

2

Prendere in considerazione l'utilizzo del formato E.164. Per il pieno supporto internazionale, è necessario un VARCHAR di 15 cifre.

Vedere Twilio's recommendation per ulteriori informazioni sulla localizzazione dei numeri di telefono.

6

In MySQL -> INT (10) non significa un numero di 10 cifre, significa un numero intero con una larghezza di visualizzazione di 10 cifre. Il valore massimo per INT in MySQL è 2147483647 (o 4294967295 se non firmato).

È possibile utilizzare un BIGINT anziché INT per memorizzarlo come un valore numerico. Utilizzando BIGINT salverà 3 byte per riga su VARCHAR (10).

Se si desidera memorizzare "Paese + area + numero separatamente". Prova a utilizzare un VARCHAR (20). Ciò ti consente di archiviare correttamente i numeri di telefono internazionali, in caso di necessità.

0

In mysql: BIGINT. In java: Long.

Problemi correlati